在练习测试中有一个有趣的问题,我不明白答案.以下代码的输出是什么:
name; } } class Bar extends Foo { public $name = 'John'; public function getName() { Foo::getName(); } } $a = new Bar; $a->getName(); ?>
最初,我认为这会产生错误,因为静态方法不能引用$ this(至少在PHP5中).我自己测试了这个,它实际输出约翰.
我添加了Foo :: getName(); 在脚本的末尾,确实得到了我期待的错误.那么,当你从一个扩展你要调用的类的类中调用静态方法时会发生什么变化?
谁会介意详细解释这里发生了什么?
Foo :: getName()使用较旧的PHP4样式的作用域解析运算符来允许调用重写的方法.
在PHP5中,您将使用parent :: getName()
如果您想扩展而不是完全覆盖基类的行为,这很有用,例如,这可能会使它更清晰
class Bar extends Foo { public $name = 'John'; public function getName() { echo "My name is "; parent::getName(); } }