-1
我正在学习依赖注入在PHP中,我认为有些东西我错过了。PHP依赖注入 - 调用注入对象的方法
我创建了两个班,Author
和Article
:
class Author{
private $firstName;
private $lastName;
public function __construct($firstName, $lastName){
$this->firstName = $firstName;
$this->lastName = $lastName;
}
public function getName(){
return $this->firstName . " " . $this->lastName;
}
}
class Article{
private $author;
private $content;
public function __construct(Author $author, $content){
$this->author = $author;
$this->content = $content;
}
public function getContent(){
return $this->content;
}
}
然后,我的索引页,我实例化我的文章类,并注入我的Author类:
require "Classes.php";
$Article = new Article(new Author("Chris", "Schmitz"), "this is the content of my article");
print_r($Article);
打印出我的对象如预期的那样:
Article Object ([author:Article:private] => Author Object ([firstName:Author:private] => Chris [lastName:Author:private] => Schmitz) [content:Article:private] => this is the content of my article)
这一切都合情合理,b UT当我去从我Author
类调用公共方法getName()
我得到一个错误:
echo $Article->author->getName();
// produces php error: PHP Fatal error: Cannot access private property Article::$author
如果我注射一个对象到另一个,我不应该能够访问被注入的对象的公共方法?我误解了预计注射会如何工作?我把它设置错了吗?
是的,但是这将打破封装原则。添加一个简单的'getAuthor()'方法会更明显,并且可以保留类中成员的封装。 –
@HalimQarroum非常真实。 –
@GeorgeBrighton:啊,* facepalm *。如果它是一条蛇,它会咬我的脸。感谢您指出了这一点。 –