我有以下代码:
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
让第3个选项工作也很好,因为使用SomeClass
的程序员无法知道,如果此信号是在SomeClass
或其中一个接口中定义的。
我的目的是在运行时动态地将接口中定义的常量添加到类中,但我没有提示如何在运行时向类添加常量。我也无法使用__set
和__get
,因为它们不适用于静态范围(它们适用于$c->SIGNAL_FOO
但不适用于SomeClass::SIGNAL_FOO
)。