类内的变量创建

时间:2014-05-27 16:10:01

标签: php variables

我正在关注依赖注入的教程。我的问题是我不明白如何在类中制定一些变量。在类作者中,我们有$ 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;
    }
}

2 个答案:

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

问题只对合成作者感兴趣,问题无需创建作者< /强>

我希望这也说明了参数的工作原理。