PHP中的抽象类抛出错误

时间:2013-09-14 14:49:33

标签: php oop methods abstract-class

我已经低于测试脚本了,我不确定为什么会给我错误。但同时按预期工作(输出文字'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(); 我不确定错误与哪些有关。

3 个答案:

答案 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()。