如何通过依赖注入来交互多个对象?

时间:2014-09-07 03:52:16

标签: php oop dependency-injection abstract-class

提供此代码:

Animal.php

abstract class Animal {
private $name;
private $health;

public function getHealth(){
    return $this->health;  
}

public function hurt(){

}

public function setHealth($health){
    $this->health = $health;

}
}

Wolf.php

class Wolf extends Animal{
    public function hurt(Tiger $tiger) {
        $tiger->setHealth(80);

    }

的index.php

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

由于

1 个答案:

答案 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);
        }
}