2013-12-11 12 views
1

我試圖學習使用依賴注入,但是在使用時遇到問題。我明白這裏兩個班的情況,但是當我去使用他們時,我做錯了什麼。基本的PHP面向對象的實例化和依賴注入

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('Mickey', 'Mouse'); 
$author->getFirstName(); 

$question = new Question('what day is it?', $author); 
$question->getQuestion(); 

我希望它輸出「米奇」和「今天是哪天?」,但我得到以下錯誤。

Undefined variable: firstName in /var/www/OOP/dependency-injection/example1.php on line 12 
Undefined variable: lastName in /var/www/OOP/dependency-injection/example1.php on line 13 

爲什麼我得到這個錯誤?我以爲我在這裏宣佈了變數$author = new Author('Mickey', 'Mouse');

感謝您的任何見解。

+1

獲取代碼完成的IDE,並牢記PHP區分大小寫。選擇一種像camelCase的樣式,並堅持下去;) – Jessica

+4

這個問題似乎是脫離主題,因爲它是關於debbuging代碼,並且將來沒有價值的訪問者。 –

回答

4

firstnamefirstName不要在您Author類匹配

public function __construct($firstname, $lastname) 
{ 
    $this->firstName = $firstName; 
    $this->lastName = $lastName; 
} 

應該

private $firstName; 
private $lastName; 
public function __construct($firstName, $lastName) 
    { 
     $this->firstName = $firstName; 
     $this->lastName = $lastName; 
    } 
+0

此外,雖然它會按照這種方式工作,但OP需要將類增值業務更新爲相同的情況。現在他有'private $ firstname;'應該是'private $ firstName;' – Jessica

+0

哇,我不敢相信我以前沒有看到!謝謝。我改變了我的變量,但現在我看到一個空白屏幕。這是因爲我只是返回函數內部的變量而不是回顯結果? –

+2

那麼在你向我們展示的代碼中沒有任何內容會將任何內容打印到屏幕上。 函數應該總是返回值,永遠不要回顯它們。如果你足夠了解這是否是因爲你沒有迴應,那麼似乎你知道你的問題的答案,或者至少可以嘗試一些基本的調試... – Jessica

1

您已經聲明private $firstname和getter中您呼叫$this->firstName資本。

+0

這不是直接的問題,問題是構造函數的參數都是小寫字母($ firstname),然後他嘗試使用camelcase來訪問它們($ firstName); – Jessica