【发布时间】:2015-08-19 02:22:09
【问题描述】:
如果类在一个文件中,看起来不会发生严格的错误,如下所示:
abstract class Food{}
class Meat extends Food{}
abstract class Animal{
function feed(Food $food){ }
}
class Cat extends Animal{
function feed(Meat $meat){
parent::feed($meat);
}
}
但是如果你将类定义放在单独的文件中并像这样包含它们:
abstract class Food{}
class Meat extends Food{}
require 'Animal.php';
require 'Cat.php';
抛出严格标准错误消息:
严格的标准:
Cat::feed()的声明应与在线 c:\path\to\Cat.php 中的Animal::feed(Food $food)兼容...
如果所有内容都在一个文件中,即使这样也可以:
class Dog extends Animal{
function feed($qty = 1){
for($i = 0; $i < $qty; $i++){
$Meat = new Meat();
parent::feed($Meat);
}
}
}
这是预期的行为吗?
因为Meat 是Food,所以首先不应该抱怨,对吧?
所以解决方案很简单明了:将所有内容放在一个文件中并满足严格的标准;)
任何提示表示赞赏
【问题讨论】:
-
您看到的完整信息是什么?
-
显示错误信息以及代码的包含方式
-
Cat可以转换为Animal,而Animal::feed采用Food,但Cat::feed没有,所以$animal = (Animal)$cat; $animal->feed($food)将失败。 -
如何包含代码:require 'Animal.php';需要'Cat.php';
-
@Siguza 谢谢你的解释,但是$Meat是一种食物,所以不意味着喂肉就是喂食吗?