У меня есть следующий код:
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
).