Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP中的抽象类抛出错误_Php_Oop_Methods_Abstract Class - Fatal编程技术网

PHP中的抽象类抛出错误

PHP中的抽象类抛出错误,php,oop,methods,abstract-class,Php,Oop,Methods,Abstract Class,我已经低于测试脚本,我不知道为什么是给我的错误。但同时工作如预期(输出文本“woof”) 第26行是//echo$dog->MakeDog()->bark() 我不确定这个错误与什么有关 也许你甚至不需要回音。这应该行得通 $dog = new Dog(); $dog->MakeDog()->bark(); 另外,去掉return只需在MakeDog函数中调用bark() function MakeDog() { $this->bark(); } 也许你甚至

我已经低于测试脚本,我不知道为什么是给我的错误。但同时工作如预期(输出文本“woof”)

第26行是
//echo$dog->MakeDog()->bark()

我不确定这个错误与什么有关

也许你甚至不需要回音。这应该行得通

$dog = new Dog();
$dog->MakeDog()->bark();
另外,去掉
return
只需在
MakeDog
函数中调用
bark()

function MakeDog() {
    $this->bark();    
}

也许你甚至不需要回音。这应该行得通

$dog = new Dog();
$dog->MakeDog()->bark();
另外,去掉
return
只需在
MakeDog
函数中调用
bark()

function MakeDog() {
    $this->bark();    
}
难道不应该是:

$dog = new Dog();
echo $dog->MakeDog();
您的函数MakeDog已经执行了方法bark()。

它不应该是:

$dog = new Dog();
echo $dog->MakeDog();
您的函数MakeDog已经执行了方法bark()。

您不能在方法
MakeDog()
之后调用
bark()
,也不能使用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();

?>

您不能在方法
MakeDog()
之后调用
bark()
,也不能使用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();

?>



提示:请看一下
bark
函数的返回值。
return
甚至不回显文本,因此我怀疑它是否来自返回值/我不是这个意思。在
MakeDog
中,返回
bark
的返回值,但是
bark()
不包含返回语句,因此隐式返回
NULL
。然后尝试在
NULL
上再次调用
bark(),因此,我怀疑它是否来自返回值/这不是我的意思。在
MakeDog
中,返回
bark
的返回值,但是
bark()
不包含返回语句,因此隐式返回
NULL
。然后您尝试在
NULL
上再次调用
bark()
(因为这是
makeDog
返回的结果),这会导致给定的错误消息。不,我需要将bark追加到
makeDog()
methodNope,我需要将bark追加到
makeDog())
method如果我想这样叫它怎么办
echo$dog->MakeDog()->bark()?您好,唯一的方法是如果方法“MakeDog”返回类的实例,我鼓励您阅读关于“Singleton”的内容,这非常简单。感谢您的回答,但我相信有一种方法可以实现这一点,而无需点击Singleton。我只是很难弄明白这一点。您可以在MakeDog方法上返回$this,并以这种方式调用echo$dog->MakeDog()->bark();太好了,就像我刚才看到的那个样,若我想这样叫它
echo$dog->MakeDog()->bark()?您好,唯一的方法是如果方法“MakeDog”返回类的实例,我鼓励您阅读关于“Singleton”的内容,这非常简单。感谢您的回答,但我相信有一种方法可以实现这一点,而无需点击Singleton。我只是很难弄明白这一点。您可以在MakeDog方法上返回$this,并以这种方式调用echo$dog->MakeDog()->bark();完美,正是我想要的