2013-04-13 43 views
0

這是情形:傳遞變量對類

有3類:類A,類B,C類

//A.php 
class A { 
public $something1; 
public $something2; 
//long list.... 

// i am the base class 
} 


//B.php 
class B extends A { 

// i am a child of A 
} 


//C.php 
class C extends A{ 

// i do the side work 
} 

該程序使一個對象並設置值類乙這樣的:

$b = new B(); 
$b->something1 = "XYZ"; 
$b->something2 = "ABC"; 
...... long list..... 

現在我想的是: 我要打電話的0某些功能在class B
我知道我可以通過在class B中製作一個對象,例如$c = new C();

但我也想通過的B所有的變量,即(something1,something2 ....) 通過程序傳遞給class C

我知道我能做到這一點是這樣的:

$c->something1 = $this->something1; 
$c->something2 = $this->something2 ..... 

但它是可以做到,如果沒有上面的代碼,因爲
$c->somethingN只會走太多的線條和我不喜歡重複的代碼。

我只想知道是否有其他方法。

+0

爲什麼不使用值,而不是單個成員的數組?然後你可以把所有的變量作爲一個來處理或者爲這些值創建一個額外的「容器」類,以便您可以更輕鬆地處理和傳遞它們。而且,實際上,您已經擁有了C類中設置的類B中的值,因爲您已將它們聲明爲類A中的公共類,而類B和類C都是這兩個類的派生類... – arkascha

+0

容器類的想法看起來很有趣,你能給個例子嗎 ? –

+0

只是一個類「存儲」或類似於被動容器的東西。您可以在一個類中創建一個實例,並將其作爲對該實例的引用傳遞給其他對象。就這樣。 – arkascha

回答

0

我知道我可以通過在類B中創建一個對象,像這樣$ c = new C();.

如果這是實例成員(非靜態),這是要走的路。


另一種方法是使用靜態成員,像這樣:

class A { 
    public static $foo; 
} 

class B extends A {} 
class C extends A {} 

# usage: 
B::$foo = 'bar'; 
echo C::$foo; // will output 'bar' 
+0

感謝您的答案,我不能讓它成爲靜態的,因爲這將在代碼中發生巨大的變化。我會用我的舊主意 –

+0

好吧。有幾種方法可以實現你想要的。但是繼承不適合(如果不是靜態成員)。需要看你的應用程序提供建議。 – hek2mgl