我不理解在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 等级警告。
答案 0 :(得分:3)
如果你看一下definition of static method,你会看到:
所以我们可以把这个论点作为 PHP 的借口。顺便说一句,在 C ++ 中,它的完成方式相同。
但是还有其他语言,就像你说的那样。例如,在 JAVA 中,名为super.printMethod();
的父方法,在 C#中,就像base.printMethod()
一样。
所以在 PHP 中,可能会为解析器的简单性做好准备,因为它们需要一个特定的边缘情况来进行这样的调用parent->printMethod()
。
答案 1 :(得分:1)
该通知意味着您不能将非静态定义的方法称为静态,但您在方法中执行的调用不是静态调用,而是对父类的调用。
所以这个调用会抛出E_STRICT警告:
$b = new B;
$b::example();
但你的例子不会