如果类在这样的文件中,则看起来不会发生严格错误:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
但是如果你把类定义放在单独的文件中并包含它们:
abstract class Food{}
class Meat extends Food{}
require 'Animal.php';
require 'Cat.php';
Run Code Online (Sandbox Code Playgroud)
抛出严格的标准错误消息:
严格标准:声明
Cat::feed()应与Animal::feed(Food $food)c:\ path\to\Cat.php在线兼容......
如果all都在一个文件中,即使这样也可以:
class Dog extends Animal{
function feed($qty = 1){
for($i = 0; $i < $qty; $i++){
$Meat = new Meat();
parent::feed($Meat);
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是预期的行为吗?
因为Meat是a Food,首先不应该有抱怨,对吧?因此解决方案简单明了:将所有内容放在一个文件中并满足严格的标准;)
任何提示赞赏