函数重写需要实例吗?
可能重复:
PHP中的后期静态绑定究竟是什么?
在这个例子中,PHP会打印出“NO”而不是“YES”,与我预期的相反。
如果我删除function c()
中的static
,用self::
替换self::
$this->
然后执行$e = new B; $e->c();
$e = new B; $e->c();
,事情会起作用。
这是否意味着实例化需要使父类中的函数调用继承类中的重载函数?
(旁边的问题:这是一个PHP的怪癖,还是这个逻辑也适用于大多数其他编程语言?如果是这样,它背后的基本原理是什么?)
class A {
static function c() {
self::d();
}
static function d() {
echo "NO :(n";
}
}
class B extends A {
static function d() {
echo "YES :)n";
}
}
B::c();
您需要使用static
关键字而不是self
或$this
。
<?php
class A {
static function c() {
static::d();
}
static function d() {
echo "NO :(n";
}
}
class B extends A {
static function d() {
echo "YES :)n";
}
}
B::c();
// YES :)
这种行为称为延迟静态绑定。
链接地址: http://www.djcxy.com/p/58031.html上一篇: Is instantiation required for function overriding?
下一篇: Calling a derived static method from a method in parent class in PHP