理解PHP中的依赖注入
类作者被注入到问题类的构造函数中,我是否正确?但是如何调用问题类来获取作者的姓名呢理解PHP中的依赖注入,php,oop,Php,Oop,类作者被注入到问题类的构造函数中,我是否正确?但是如何调用问题类来获取作者的姓名呢 class Author { private $firstName; private $lastName; public function __construct($firstName, $lastName) { $this->firstName = $firstName; $this->lastName = $lastName; }
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类继承了Author类,因此Question的实例可以使用Author类的函数?您可以创建一个新方法:
$question = new Question('What is PHP', 'Adam');
$question->getFirstname;
或者,如果您并不真正关心或觉得它不适用:
class Question
{
// ...
function getAuthorFirstname()
{
return $this->author->getFirstname();
}
}
$question = new Question(.., new Author(..., ...));
echo $question->getAuthorFirstname();
最终,这一切都归结为在信息隐藏和实用主义之间取得平衡。您可以创建一种新方法:
$question = new Question('What is PHP', 'Adam');
$question->getFirstname;
或者,如果您并不真正关心或觉得它不适用:
class Question
{
// ...
function getAuthorFirstname()
{
return $this->author->getFirstname();
}
}
$question = new Question(.., new Author(..., ...));
echo $question->getAuthorFirstname();
归根结底,这一切都归结为在信息隐藏和实用主义之间取得平衡。Simple
$question = new Question(.., new Author(..., ...));
echo $question->getAuthor()->getFirstname();
如果有帮助的话,请这样想
echo $question->getAuthor()->getFirstName();
还要注意,不能用字符串“Adam”构造问题
,需要传递作者的实例
$author = $question->getAuthor();
echo $author->getFirstName();
简单的
如果有帮助的话,请这样想
echo $question->getAuthor()->getFirstName();
还要注意,不能用字符串“Adam”构造问题
,需要传递作者的实例
$author = $question->getAuthor();
echo $author->getFirstName();
啊,这是链接的方法,对吗?那么我调用getFirstname的代码是错误的?如果我不想改变我的问题类中的任何内容怎么办?这真的违反了LoD吗
getAuthor()
返回Author
实例,因此在这一点上,我们没有Question
事实上,使用getAuthorFirstName
示例意味着Question
知道Author
getAuthor()
只返回类型Author
的值。我没有看到LoD指定只能返回基元类型。“展开”所有复杂类型并提供对其基本值的直接访问方法没有多大意义,这只会增加复杂性和依赖性如果希望完全隐藏内部实现,并且不将作者
对象的知识传播到此类之外。但是,如果一个问题
对象的消费者期望知道作者
类型,那么以增加复杂性为代价隐藏它是没有意义的。啊,这是方法链接对吗?那么我调用getFirstname的代码是错误的?如果我不想改变我的问题类中的任何内容怎么办?这真的违反了LoD吗getAuthor()
返回Author
实例,因此在这一点上,我们没有Question
事实上,使用getAuthorFirstName
示例意味着Question
知道Author
getAuthor()
只返回类型Author
的值。我没有看到LoD指定只能返回基元类型。“展开”所有复杂类型并提供对其基本值的直接访问方法没有多大意义,这只会增加复杂性和依赖性如果希望完全隐藏内部实现,并且不将作者
对象的知识传播到此类之外。但是,如果一个问题
对象的消费者期望知道作者
类型,那么以增加复杂性为代价隐藏它是没有意义的。那么最终结果会是这样的$问题=新问题(‘什么是PHP’、新作者(‘亚当’、‘姓’);echo$question->getAuthor()->getFirstName()@詹姆斯·勒布朗:是的。您还可以预先构造author,例如$author=newauthor('Foo','Bar')$q=新问题('Eh?',$作者)那么决赛是这样的$问题=新问题(‘什么是PHP’、新作者(‘亚当’、‘姓’);echo$question->getAuthor()->getFirstName()@杰姆斯勒布朗是的。您还可以预先构造author,例如$author=newauthor('Foo','Bar')$q=新问题('Eh?',$作者)代码>