我已经低于测试脚本了,我不确定为什么会给我错误。但同时按预期工作(输出文字'woof');
abstract class Animal {
abstract function bark();
function MakeDog(){
return $this->bark();
}
}
class Dog extends Animal {
function bark(){
echo 'Woof';
}
}
$dog = new Dog();
echo $dog->MakeDog()->bark(); // this outputs 'woof' but with error.
Fatal error: Call to a member function bark() on a non-object in [...] 26
第26行是//echo $dog->MakeDog()->bark();
我不确定错误与哪些有关。
答案 0 :(得分:2)
您无法在方法bark()
之后调用MakeDog()
并且您无法使用echo返回消息,为此使用“return”,正确的代码:
<?php
abstract class Animal {
abstract function bark();
public function MakeDog(){
return $this->bark();
}
}
class Dog extends Animal {
function bark(){
return 'Woof';
}
}
$dog = new Dog();
echo $dog->MakeDog();
?>
答案 1 :(得分:1)
也许你甚至不需要回声。这应该工作
$dog = new Dog();
$dog->MakeDog()->bark();
另外,摆脱return
只需调用bark()
函数中的MakeDog
function MakeDog() {
$this->bark();
}
答案 2 :(得分:1)
不应该只是:
$dog = new Dog();
echo $dog->MakeDog();
你的函数MakeDog已经执行了方法bark()。