我想知道当静态子类扩展静态父类时,使用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()之间有什么区别吗?如果有,那么它是什么?
谢谢
此致
答案 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用于调用静态函数和操作静态变量,这些变量是特定于类的特定于对象的。