调用注入对象的方法

我正在学习使用php进行依赖注入,我认为我错过了一些东西。

我创建了两个类, AuthorArticle

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;
    }
}

然后,在我的索引页上,我实例化了我的Article类并注入了我的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 ) 

这一切都有道理,但是当我从我的Author类中调用公共方法getName() ,我得到一个错误:

echo $Article->author->getName();
// produces php error: PHP Fatal error:  Cannot access private property Article::$author

如果我向另一个对象注入一个对象,我不应该能够访问注入对象的公共方法吗? 我误解了预计注射会如何工作? 我把它设置错了吗?


$authorArticleprivate属性,这意味着您只能从该类中的方法访问它。

虽然getName()方法确实是public ,但是->链的所有部分都必须从您使用它们的上下文中可见 - 不幸的是, author不是。

正如Halim所建议的,解决错误的最简单方法是为Article类中的author属性创建一个public getter方法:

public function getAuthor() {
    return $this->author;
}
链接地址: http://www.djcxy.com/p/82279.html

上一篇: call injected object's method

下一篇: What is a composition root in the context of Dependency Injection