【发布时间】:2014-01-20 03:14:14
【问题描述】:
我想知道当静态子类扩展静态父类时使用 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() 之间有什么区别吗?如果有,那是什么?
谢谢
问候
【问题讨论】:
-
如果子类中有
overriddenfoo(),那么self::foo()调用子类版本,而parent::foo()调用原始父类版本 -
+1,应该是答案
-
static::foo()让它更有趣:) -
好的,但是如果 Child 类没有自己的 foo() 定义,那么这是否意味着两个调用之间没有区别,即 self:: 和 parent:: ?
-
如果子类没有覆盖
foo(),那么它会执行父类foo()代码....调用有所不同,但执行的内容没有区别。调用parent::foo()将始终执行父类的 foo() 方法,即使子类覆盖它;调用 self::foo() 将执行 foo() 覆盖,如果它存在于 self(即子),否则它将执行父 foo() 如果不存在覆盖
标签: php class static parent self