[英]parent::method() - calling non static method
我不理解在PHP中调用父方法的概念。 父方法不是静态的,但它是静态调用的 - 通常PHP会抛出错误/警告。
问题是,这是来自PHP的怪癖,还是它应该如何在OOP中?
以php.net为例:
<?php
class A {
function example() {
echo "I am A::example() and provide basic functionality.<br />\n";
}
}
class B extends A {
function example() {
echo "I am B::example() and provide additional functionality.<br />\n";
parent::example();
}
}
$b = new B;
// This will call B::example(), which will in turn call A::example().
$b->example();
?>
http://php.net/manual/en/keyword.parent.php
在PHP 5中,静态调用非静态方法会生成E_STRICT级别警告。
所以我们可以把这个论点作为PHP的借口。 顺便说一句,在C ++中它以相同的方式完成。
但是还有其他语言,就像你说的那样。 例如,在JAVA中 ,父方法称为super.printMethod();
在C#中 ,它就像base.printMethod()
。
因此在PHP中可能会为解析器的简单性做好准备,因为对于这样的调用parent->printMethod()
,它们需要特定的边缘情况。
该通知意味着您不能将非静态定义的方法称为静态,但您在方法内执行的调用不是静态调用,而是对父类的调用。
所以这个调用将抛出E_STRICT警告:
$b = new B;
$b::example();
但你的例子不会
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.