理解PHP中的依赖注入

时间:2014-12-11 04:07:34

标签: php oop

class Author {
    private $firstName;
    private $lastName;

    public function __construct($firstName, $lastName) {
        $this->firstName = $firstName;
        $this->lastName = $lastName;
    }

    public function getFirstName() {
        return $this->firstName;
    }

    public function getLastName() {
        return $this->lastName;
    }
}

class Question {
    private $author;
    private $question;

    public function __construct($question, Author $author) {
        $this->author = $author;
        $this->question = $question;
    }

    public function getAuthor() {
        return $this->author;
    }

    public function getQuestion() {
        return $this->question;
    }
}

类作者被注入到Question类的构造函数中我是否正确?但如何调用Question类来获取作者的姓名?

$question = new Question('What is PHP', 'Adam');
$question->getFirstname;
像这样?我假设Question类继承了Author类,所以Question的实例可以使用Author Class的功能吗?

2 个答案:

答案 0 :(得分:2)

您可以创建一个新方法:

class Question 
{
    // ...
    function getAuthorFirstname()
    {
        return $this->author->getFirstname();
    }
}

$question = new Question(.., new Author(..., ...));
echo $question->getAuthorFirstname();

或者,如果你真的不关心Law of Demeter或认为它不适用:

$question = new Question(.., new Author(..., ...));
echo $question->getAuthor()->getFirstname();

最终,所有这些都归结为在信息隐藏和实用主义之间取得平衡。

答案 1 :(得分:2)

简单

echo $question->getAuthor()->getFirstName();

如果有帮助的话,可以这样想想

$author = $question->getAuthor();
echo $author->getFirstName();

另请注意,您无法使用字符串" Adam"构建Question,您需要传递Author的实例

$question = new Question('What is PHP', new Author('Adam', 'Lastname'));