PHP: добавление констант в класс во время выполнения - PullRequest
1 голос
/ 20 апреля 2011

У меня есть следующий код:

interface ITest {
    const SIGNAL_FOO = 'foo';
}
class SomeClass extends SignalSlotObject implements ITest {
    const SIGNAL_BAR = 'bar';
}

SignalSlotObject извлекает все константы, начинающиеся с 'SIGNAL_' во время выполнения, из класса и из всех интерфейсов, которые он реализует.Это нормально и работает, но моя проблема заключается в следующем:

$c = new SomeClass();
$c->connect(SomeClass::SIGNAL_BAR, ...); //works well
$c->connect(ITest::SIGNAL_FOO, ...);     //also works well
$c->connect(SomeClass::SIGNAL_FOO, ...); //doesn't work

Было бы замечательно, чтобы третий вариант также работал, потому что программист, использующий SomeClass, не может знать, определен ли этот сигнал в SomeClass или один из его интерфейсов.

Мое намерение состояло в том, чтобы динамически добавлять константы, определенные в интерфейсах, к классу во время выполнения, но у меня нет подсказки, как добавить константу во время выполнения к классу.Я также не могу использовать __set и __get, потому что они не работают в статической области (они будут работать для $c->SIGNAL_FOO, но не для SomeClass::SIGNAL_FOO).

...