在下面的示例代码中,父类test()
中的方法Foo
被子类test()
中的方法Bar
覆盖。是否可以从Foo::test()
致电Bar::test()
?
class Foo
{
$text = "world\n";
protected function test() {
echo $this->text;
}
}// class Foo
class Bar extends Foo
{
public function test() {
echo "Hello, ";
// Cannot use 'parent::test()' because, in this case,
// Foo::test() requires object data from $this
parent::test();
}
}// class Bar extends Foo
$x = new Bar;
$x->test();
答案 0 :(得分:34)
答案 1 :(得分:4)
parent::test();
(参见http://www.php.net/manual/en/language.oop5.paamayim-nekudotayim.php上的示例#3)
答案 2 :(得分:0)
调用父方法可能被认为是不良习惯或代码异味,并且可能表明可以以某种方式改进的编程逻辑,即子级不必调用父方法。 Wikipedia提供了很好的通用描述。
不调用父级的实现将如下所示:
abstract class Foo
{
$text = "world\n";
public function test() {
$this->test_child();
echo $this->text;
}
abstract protected function test_child();
}// class Foo
class Bar extends Foo
{
protected function test_child() {
echo "Hello, ";
}
}// class Bar extends Foo
$x = new Bar;
$x->test();
答案 3 :(得分:0)
只需在$ text属性中设置可见性级别即可。
private $text = "world\n";
答案 4 :(得分:-2)
根据你对pastebin的评论,我会说你做不到。
也许你有这样的东西?
class foo {
public function foo($instance = null) {
if ($instance) {
// Set state, etc.
}
else {
// Regular object creation
}
}
class foo2 extends foo {
public function test() {
echo "Hello, ";
// New foo instance, using current (foo2) instance in constructor
$x = new foo($this);
// Call test() method from foo
$x->test();
}
}