2013-03-16 189 views
6

我對PHP OO編程技術還很陌生,我有一個非常簡單的廣泛問題,是在類中實例化一個類,然後傳遞該實例到另一個班級?PHP將一個類的實例傳遞給另一個類

我想要的是能夠創建一個特定類的實例,我知道我將永遠需要通過每個用戶請求。第二類不僅僅是一個輔助類,理想情況下,在我的應用程序中它將是一個加載視圖的「加載器」。

第一類調用其他兩個類:

require 'classTwo.php'; 
require 'classThree.php'; 

class first { 
    public $classTwo, $classThree; 

    public function __construct() { 
      $this -> classTwo = new classTwo; 
      $this -> classThree = new classThree; 

      $this -> classThree -> displayNum($this -> classTwo); 

    } 
} 

第二類是輔助類:

class classTwo { 
    public function returnVal() { 
      return 123; 
    } 
} 

第三類是動作類的地方工作實際和最終的顯示會發生:

class classThree { 
    public function displayNum($instance) { 
      echo $instance -> returnVal(); 
    } 
} 

總的來說我只是想知道這是否是不好的做法,因爲我從未見過它之前完成。

在此先感謝!

+1

Upvoted我第一次開始OOP。一旦您熟悉Jaitsu的答案中的鏈接所依賴的依賴注入,我建議您查看[Pimple](http://pimple.sensiolabs.org/),它是所有類和參數的DI容器。 – 2013-03-16 00:51:32

+0

Thanks @ Adam-E我絕對同意,並且我已經工作並閱讀了足夠的PHP OO技術,並且從未見過我之前使用的方法,並且我認爲誰比Stack Overflow用戶更好,我總是發現它非常有幫助。我一定會考慮Pimple謝謝! – 2013-03-16 01:14:12

回答

8

注入任何依賴對象是一種很好的做法,因爲這樣可以在單元測試過程中輕鬆地進行模擬。

一般來說,如果你有ClassA,它依賴於ClassB一個實例的功能,那麼你可以做這樣的事情..

$objectB = new ClassB(); 
$objectA = new ClassA($objectB); 

看看http://net.tutsplus.com/tutorials/php/dependency-injection-in-php/

編輯:構造注入將依賴項傳遞給新對象的構造函數(如上所示)。

二傳手注射使用的方法來設置相關性,通常使用時的依賴並不重要:因爲它是一個非常好的問題,我希望我問什麼時候這樣的問題

$objectB = new ClassB(); 
$objectA = new ClassA(); 
$objectA->setObjectB($objectB); 
+0

非常感謝@Jaitsu,你能告訴我爲什麼從實例化而不是從方法傳遞實例更好。 – 2013-03-16 00:53:04

+0

@TomBird有兩種類型的注入,setter注入和構造函數注入。通常如果依賴是可選的,那麼你使用setter注入,但是如果你的對象*必須*接收另一個對象的實例才能工作,那麼使用構造函數注入 – JamesHalsall 2013-03-16 09:09:01

2

是的。這會讓單元測試你的類變得很痛苦,因爲它裏面有依賴關係。

要麼注入類的實例要麼注入工廠。