2011-01-18 43 views
0

我有兩個班。我們稱他們爲'Class_A'和'Class_B'。我想在'B類'中使用'Class_A'屬性和方法。像這樣...如何使用第二類中的第一類屬性和方法?

$a = new Class_A; 


class Class_B { 

    function __construct() { 

     $a->foo = 2; 

     $a->magic(); 

    } 

} 

當然,這是行不通的。對付它的最佳做法是什麼?

  • 'global'keyword?
  • 使'Class_A'的屬性和方法是靜態的嗎?
  • 另一種方式......?
+0

這一切都取決於你實際想要完成的事情。每種方法都有其自身的優點和缺點。您可以使用靜態成員,繼承或將Class_A傳遞給Class_B作爲參數。這取決於你需要做什麼。 – Wade 2011-01-18 23:48:54

+0

我正在創建微小的MVC框架。 'Class_A'代表'view','Class_B'代表'controller'。 我使用靜態成員來完成它,但似乎幾乎所有其他MVC框架都使用「依賴注入」。 – daGrevis 2011-01-18 23:53:56

回答

3

Dependency injection

$a = new Class_A(); 

class Class_B { 
    function __construct($x) { 
      $x->foo = 2; 
      $x->magic(); 
    } 
} 

$b = new Class_B($a); 
0

如果您需要Class_A類的實例,然後將它傳遞給類Class_B的構造函數:

class Class_B { 
    function __construct($a) { 
     $a->foo = 2; 
     $a->magic(); 
    } 
} 

$a_instance = new Class_A(); 

$b = new Class_B($a_instance); 

如果類Class_A不需要爲了被實例化要執行其任務,請將屬性和方法定義爲static,並用Class_A::method();

避免global s。如果Class_BClass_B(例如香蕉是水果),那麼你可能會繼承與繼承。

相關問題