0

我一直在测试脚本之下,我不确定为什么会给我错误。但同时按预期工作(输出文本“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(); 我不确定错误与什么有关。

4

3 回答 3

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();

?>
于 2013-09-14T15:10:52.910 回答
1

也许你甚至不需要回应。这应该工作

$dog = new Dog();
$dog->MakeDog()->bark();

另外,摆脱函数中的return调用bark()MakeDog

function MakeDog() {
    $this->bark();    
}
于 2013-09-14T14:58:03.317 回答
1

不应该只是:

$dog = new Dog();
echo $dog->MakeDog();

您的函数 MakeDog 已经执行了方法 bark()。

于 2013-09-14T15:01:05.063 回答