2012-09-10 17 views
0

有相同類別的兩個對象:對象的內容被執行功能之後改變

$obj1 = new MyClass(); 
$obj2 = new MyClass(); 

然後我施加函數func$obj2。但是,一旦執行此功能,我注意到$obj1的內容也發生了奇蹟般的變化。 func內部我沒有使用任何對$obj1的引用。這個問題可能的原因是什麼?我如何解決它?

$obj2 = func($obj2,$vars); 

我應該說我func之前使用其他功能,並且他們還利用$obj2作爲輸入。但是,執行後$obj1的內容不會更改。

P.S.當我在Zend Studio中調試此代碼並進入func時,Watch list表示$obj1 = null,但我認爲這很好,因爲func保存在不同的PHP文件中。

+4

你能爲你的函數添加代碼嗎? – andrewsi

+0

這是一個很長的代碼。但一般來說,所有步驟都在$ obj2附近,如$ obj2-> getVar($ i) - > setVal(5)等。它不使用$ obj1。 –

+0

如果沒有你的代碼,這將很難被猜出一個好的答案。 –

回答

4

考慮一下:

class MyClass 
{ 
    public static $value; 

    public function test($testvalue) 
    { 
    self::value = $testvalue; 
    } 
} 

$obj1 = new MyClass(); 
$obj2 = new MyClass(); 

$obj1->test(123); 

echo $obj2::value; // this will echo 123!! 

有向$ obj2的製作,只爲$ OBJ1沒有變化。靜態會導致var釋放其對象內容,併成爲所有對象的「全局」。

+0

對不起,我沒有明白這一點。請告訴我你的建議,以避免我描述的問題?什麼是最簡單的解決方案(我不想佔用整個邏輯)? –

+0

我讓代碼更清潔一些。避免單身,靜態和全局。 – JvdBerg

+0

重點是:檢查班級中是否存在靜態(共享)屬性。 –