提供此代码:
abstract class Animal {
private $name;
private $health;
public function getHealth(){
return $this->health;
}
public function hurt(){
}
public function setHealth($health){
$this->health = $health;
}
}
class Wolf extends Animal{
public function hurt(Tiger $tiger) {
$tiger->setHealth(80);
}
class StackOverflowExample{
public static function run(){
$dog = new Dog("Cokey",100);
$wolf = new Wolf("Wolfenstein",100);
$tiger = new Tiger("Rocky",100);
$wolf->hurt($tiger);
echo $tiger->getHealth();
$wolf->hurt($dog);
echo $dog->getHealth();
}
}
StackOverflowExample::run();
我有一个问题,狼可以伤害Tiger因为他的代码,但我不能伤害狗因为我需要在参数上只指定一个Class和Object。有没有办法与老虎和狗这两个班级互动? 这是错误:
Catchable fatal error: Argument 1 passed to Wolf::hurt() must be an instance of Tiger, instance of Dog given
由于
答案 0 :(得分:0)
如果您不想将参数限制为单个类,则应删除函数中的类型提示。
这是一个使用get_class()函数检索$animal
类的名称以达到预期效果的示例:
class Wolf extends Animal{
public function hurt($animal) {
// If animal is a tiger.
if (get_class($animal) === 'Tiger') {
$animal->setHealth(80);
}
// If animal is a dog.
if (get_class($animal) === 'Dog') {
$animal->setHealth(50);
}
}