我对此事有点困惑。我正在设计一个ORM类,它的行为与ActiveRecord在ruby on rails中的行为非常相似,但这并不重要。
我要说的是,我的类广泛使用了静态属性继承,特别是用于数据库和表处理。我的问题是,我是否应该使用self ::?
您必须问自己:“我要使用适当的方法来解决问题吗?”
self::并static::做两件事。例如self::或是__CLASS__对当前类的引用,因此在一定范围内进行定义将无法满足对静态调用的需求。
self::
static::
__CLASS__
继承会发生什么?
class A { public static function className(){ echo __CLASS__; } public static function test(){ self::className(); } } class B extends A{ public static function className(){ echo __CLASS__; } } B::test();
这将打印
A
另一方面,static::它具有预期的行为
class A { public static function className(){ echo __CLASS__; } public static function test(){ static::className(); } } class B extends A{ public static function className(){ echo __CLASS__; } } B::test();
B
在PHP 5.3.0中,这称为 后期静态绑定 。它解决了调用 在运行时引用 的类的限制。
考虑到这一点,我认为您现在可以充分看到并解决问题了。如果您要继承几个静态成员,并且需要访问父成员和子成员,self::则将无法满足要求。