函数重写需要实例吗?
可能重复:
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
