PHP:self :: vs parent :: with extends

时间:2014-01-02 16:11:42

标签: php class static parent self

我想知道当静态子类扩展静态父类时,使用self ::和parent ::之间的区别是什么。

class Parent {

    public static function foo() {
       echo 'foo';
    }
}

class Child extends Parent {

    public static function func() {
       self::foo();
    }

    public static function func2() {
       parent::foo();
    }
}

func()和func2()之间有什么区别吗?如果有,那么它是什么?

谢谢

此致

2 个答案:

答案 0 :(得分:32)

                Child has foo()     Parent has foo()
self::foo()        YES                   YES               Child foo() is executed
parent::foo()      YES                   YES               Parent foo() is executed
self::foo()        YES                   NO                Child foo() is executed
parent::foo()      YES                   NO                ERROR
self::foo()        NO                    YES               Parent foo() is executed
parent::foo()      NO                    YES               Parent foo() is executed
self::foo()        NO                    NO                ERROR
parent::foo()      NO                    NO                ERROR

如果您正在寻找正确的使用案例。 parent允许访问继承的类,而self是对运行的方法(静态或其他)所属的类的引用。

self关键字的一个常用用法是在PHP中使用Singleton模式时,self不尊重子类,而static执行New self vs. new static

parent提供了访问继承类方法的功能,如果您需要保留一些默认功能,通常很有用。

答案 1 :(得分:1)

self用于调用静态函数和操作静态变量,这些变量是特定于类的特定于对象的。