我正在关注依赖注入的教程。我的问题是我不明白如何在类中制定一些变量。在类作者中,我们有$ firstname和$ lastname。在课堂课程中我们有$ author和$ question。然后神奇地(?)我们在类构造函数中得到$ authorFirstname和$ authorLastname。
我没有得到它 - 它就像它们被连接在一起,但那不可能,对吧?但是然后$ classFirstname和$ authorLastname尚未在类Question中声明。
所以,问题:作者如何获得$ authorFirstname和$ authorLastname - 或者我是在想这个?
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, $authorFirstName, $authorLastName) {
$this->author = new Author($authorFirstName, $authorLastName);
$this->question = $question;
}
public function getAuthor() {
return $this->author;
}
public function getQuestion() {
return $this->question;
}
}
答案 0 :(得分:1)
你是在思考。
你注意到,__construct($question, $authorFirstName, $authorLastName)
......
construct是一个特殊的函数,在创建该类的新对象时运行。
$authorFirstName
和$authorLastName
只是要传递给Question构造函数的变量,又名
$question = new Question($questioninfo,'William','Shakespeare');
(在这种情况下,$authorFirstName
=威廉,$authorLastName
=莎士比亚)
它们仅在__construct()
函数的范围内使用,在这种情况下,实例化新的作者。所以如果输入如上所述,这将发生在Question:
$this->author = new Author('William', 'Shakespeare');
这些变量将由作者的构造函数处理,如$firstName
和$lastName
......有意义吗?
答案 1 :(得分:1)
问题 ctor是隐藏依赖的示例, 不 显示依赖注入如何工作:< / p>
public function __construct($question, $authorFirstName, $authorLastName) {
$this->author = new Author($authorFirstName, $authorLastName);
$this->question = $question;
}
如此代码所示,参数$authorFirstName
,$authorLastName
用于创建作者依赖 问题。因此依赖性不注入。
相反,应该注入作者:
public function __construct($question, Author $author) {
$this->author = $author;
$this->question = $question;
}
问题只对合成作者感兴趣,问题无需创建作者< /强>
我希望这也说明了参数的工作原理。