我对这件事有点困惑。我正在设计一个 ORM 类,它试图在 ruby on rails 中表现得与 ActiveRecord 非常相似,但这不是重点。
我想说的是,我的类广泛使用静态属性继承,特别是用于数据库和表处理。我的问题是,我应该使用 self::吗?
最佳答案
您必须问自己:“我是否使用适当的方法来解决问题?”
self::
和 static::
做两个不同的事情。例如 self::
或 __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
那叫 late static binding in PHP 5.3.0 .它解决了调用在运行时引用的类的限制。
考虑到这一点,我认为您现在可以充分了解并解决问题。如果你继承了几个静态成员并且需要访问父和子成员 self::
是不够的。
关于PHP 可以使用 static::replace self::吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4718808/