PHP: self:: vs parent:: with extends

2022-08-30 16:28:12

我想知道当静态子类扩展静态父类时,使用self::和partern::有什么区别,例如

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
                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

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

关键字的一个流行用法是在PHP中使用Singleton模式时,不尊重子类,而New self与new staticselfselfstatic

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


答案 2

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


推荐