关于类:PHP:self :: vs parent :: with extends

PHP: self:: vs parent:: with extends

我想知道在静态子类扩展静态父类(例如)时,使用self::和parent::有什么区别。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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()之间有什么区别吗?如果有,那是什么?

谢谢你

当做


1
2
3
4
5
6
7
8
9
                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是对运行方法(静态或其他)所属的类的引用。

在php中使用singleton模式时,self关键字的一个流行用法是,self不尊重子类,而static使用新的self与新的static。

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


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