Php 继承和重写类型化属性
我正在尝试用PHP中的继承来创建各种各样的东西。例如,以下代码不起作用Php 继承和重写类型化属性,php,inheritance,Php,Inheritance,我正在尝试用PHP中的继承来创建各种各样的东西。例如,以下代码不起作用 class Animal { public Food $food; } class Cat extends Animal { public Fish $food; //so this part doesn't work, eventhough Fish extends from Food } class Dog extends Animal { public Meat $food; //so th
class Animal {
public Food $food;
}
class Cat extends Animal {
public Fish $food; //so this part doesn't work, eventhough Fish extends from Food
}
class Dog extends Animal {
public Meat $food; //so this part doesn't work, eventhough Meat extends from Food
}
class Food {
public int $weightInKilograms;
}
class Fish extends Food {
public bool $isSaltWaterFish;
}
class Meat extends Food {
public bool $isRawMeat;
}
那么,在上面的代码中添加注释的地方,如何使部件工作呢?我不明白为什么这不应该起作用,因为ChildX也和SuperX一样,如果它扩展了SuperX
我得到以下错误:
致命错误:猫的类型::$食物必须是食物(如 第6行[…]中的[…]类动物) 快速回答 这是不可能的 简短回答 在super class
Animal
中添加一个抽象方法,其中包含Food
参数
Animal.php
abstract public function setFood(Food $food);
Cat.php
public function setFood(Food $food) {
if (!$food instanceof Fish) {
throw new InvalidArgumentException(self::class . " only support " . Fish::class . " objects.");
}
$this->food = $food;
}
旁注:这个问题通常与PHP有关,因此您可能希望删除框架标记,因为它没有专门绑定到其中任何一个。