当使用self over static时

时间:2017-07-30 05:24:55

标签: php

从版本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版本)。

1 个答案:

答案 0 :(得分:0)

自我和静态之间存在差异。如果使用static调用该方法,它将在方法实际所在的类的上下文中运行。