PHP依赖注入
我试图理解一个关于PHP依赖性的教程。以下是示例代码:-PHP依赖注入,php,dependency-injection,Php,Dependency Injection,我试图理解一个关于PHP依赖性的教程。以下是示例代码:- class Author { private $firstName; private $lastName; public function __construct($firstName, $lastName) { $this->firstName = $firstName; $this->lastName = $lastName; } public f
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;
}
}
为了了解其工作原理,我添加了以下代码:-
$author = new Author('John', 'Doe');
$qn = new Question('What is your name?', $author);
$authorName = $qn->getAuthor();
print_r($authorName);
这给了我以下的信息:-
Author Object
(
[firstName:Author:private] => John
[lastName:Author:private] => Doe
)
如何访问Author对象的值,即firstName和lastName
我尝试了$authorName->firstName,但返回了一个错误
Cannot access private property Author::$firstName
正如我所说,我只是想用这个代码示例了解依赖项注入。我知道,在Author类中将$firstName类型更改为public将使其正常工作,但如果代码示例不正确或我检索值的代码不正确,则仍需要任何PHP专家的澄清
谢谢,非常感谢您的反馈 这里的范例是,对于每个“私有”字段,都有一个相应的“公共”函数来获取该字段。这就是从$qn对象获取作者的方法:通过调用
$qn->getAuthor()
,同样地,因为这会给您一个作者,并且您需要作者的名字,所以您可以使用
$author = $qn->getAuthor();
$firstname = $author->getFirstName();
依赖项注入只是要求当您提出问题时,传递给构造函数的第二个参数必须是
Author
类型。如果您想从问题类访问作者名称,可以修改getAuthor函数:
课堂问题getAuthor()
通过呼叫
$authorName = $qn->getAuthor();
print_r($authorName);
// you will get John Doe
由于Question类包含一个Author实例,因此我建议创建第三个名为
getAuthorName
的方法,而不是更改应该返回Author实例的方法。那么回到我最初的问题。。。。有没有办法让我检索作者的名字,或者是第一个,或者是最后一个,或者两者都有。。。如果不修改这两个类示例,并且只使用$qn对象?hi@asyadiqin,很遗憾,您确实需要编辑其中一个。试着实现我的答案。那也许你会有个主意?干杯。你这样称呼它有点糟糕,那;这就是为什么我在问题课上给作者打电话。就像$question->getAuthor()
而不是$author->getFirstName()
。对我来说,使用$author对象来检索名字和姓氏会破坏将依赖项注入添加到question类中的目的。如果这个示例类的目的是简单地展示如何实现这一点,那么就这样吧。从表面上看,我是否正确地假设,即使示例显示了依赖项注入是如何完成的,如果不在Question类本身中修改或添加方法,我无法从Question类中检索值?@asyadiqin您必须更像是在定义一个契约,该契约的问题始终包含作者。因此,如果我使用一个问题
实例,我总能找到它的相关作者。要真正获取firstName,您需要执行类似于$qn->getAuthor()->getFirstName()
的操作。
$authorName = $qn->getAuthor();
print_r($authorName);
// you will get John Doe