从版本5.3开始,PHP已经实现了Late Static Bindings,,可用于在静态继承的上下文中引用被调用的类。
一般来说,static::
似乎在很多情况下比self::
更有用,主要是因为你希望能够扩展你的类和方法。从类self::someMethod()
调用类中的方法似乎没有意义,因为如果扩展此类并重写此方法,它可能会导致不可靠的行为。
例如(live example):
class ParentClass {
public static function someMethod () { return 'ParentClass::someMethod()'; }
public static function getSomeMethodData() { return self::someMethod(); }
}
class ChildClass extends ParentClass {
public static function someMethod () { return 'ChildClass::someMethod()'; }
}
ChildClass::getSomeMethodData();
// Return -> "ParentClass::getSomeMethodData()"
// Not -> "ChildClass ::getSomeMethodData()"
如果将self::
替换为static::
,则可以更改此行为。
好的,在blábláblá之后,我的问题是:在某些情况下,我们应该使用self::
代替static::
方法还是属性?
我的意思是,我可以用self::
替换所有static::
而不更改我所有代码库的代码行为吗?
编辑#1:以使其更清晰。哪种情况我必须使用self::
而不是static::
?我的意思是,在哪种情况下不可避免使用self::
?例如,我可以考虑使用self::class
,但可以将其替换为__CLASS__
(尽管我仍然更喜欢self::class
版本)。
答案 0 :(得分:0)
自我和静态之间存在差异。如果使用static调用该方法,它将在方法实际所在的类的上下文中运行。