我正在尝试寻找一种让父类影响子类的静态属性的方法-不需要子类中的特殊代码。
我有3个班级:P
,A
和Q
。 Q
是基类,P
和A
进行了扩展。
有些操作我每个子类只想执行一次-特别是获取数据库表定义-无论创建了多少个不同的对象。我的想法是,每个类只需要定义一次。
我的基类当前是这样的:
class Q{
public static $__initialized = FALSE;
public static function initialize(){
static::$__initialized = TRUE;
}
}
简单的子类如下:
// class A is identical
class P extends Q{
public static function isInitialized(){
echo (static::$__initialized) ? 'Initialized' : 'Not initialized';
}
}
这是我的测试代码:
P::initialize();
A::isInitialized();
调用A::isInitialized()
时,即使尚未调用,它也会输出“已初始化”。
我在static
中使用了Q::initialize()
关键字来尝试绑定到后期的静态绑定,但是我意识到这不会引用P::__initialized
,因为__initialized
是在Q
中定义的 ,因此static::__initialized
将引用Q
的属性。
是否有一种无需在__initialized
和P
中声明A
的情况下完成我想要的事情的方法?我的目标是能够编写一个扩展Q
并具有大量可用功能(如加载表结构)的类,而无需在扩展类中进行任何基础工作。