2011-05-05 53 views
0

爲什麼這不起作用?php中的數組類

class Test{ 

    private $vars = array('ALL' => 0, 
         'ONE' => 1); 

    private $var = $vars['ALL']; // this does not work 

    function __construct(){ 
    $this->var = $vars['ALL']; // this does work 
    } 
} 

代碼在這裏例如:http://codepad.org/QSjHMDij

,因爲你不能在類之前的構造函數初始化期間訪問$this爲什麼數組沒有在聲明中

private $var = $vars['ALL']; // this does not work 

回答

3

也許訪問被調用(當你在$ var的定義中試圖做到這一點時就暗示了這一點)。一些語言(如C#)會讓你這樣做,但我認爲PHP是不會的。

+0

但我沒有在第8行上使用$(這是鍵盤示例btw中的第8行,這裏是第6行) – superbly 2011-05-05 11:08:27

+0

您不必:暗示。如果您無法訪問'$ this',則無法訪問任何成員變量。編輯:實際上,它甚至可能不是隱含的:我忘記它是真的,但PHP可能不具有與C++和C#相同的作用域分辨率。 PHP通常會執行異常的範圍解析以避免含糊不清,所以我仍然不會感到驚訝。 – 2011-05-05 11:09:48

+0

好的。我能否假定變量只在對象初始化時被初始化? – superbly 2011-05-05 11:13:06

0

既不以您打算的方式「工作」。聲明實例成員時不允許使用變量(因此unexpected T_VARIABLE錯誤)。在構造函數中,引用一個名稱爲$vars的本地變量,該變量不存在,表示您將$this->var設置爲NULL

通過做$this->vars訪問實例成員。你只能在構造函數中做到這一點。

0

聲明成員(變量)時,不能分配其他成員的數組鍵值,它會導致分析錯誤。

例如,您認爲(錯誤)$vars['ALL']指的是您的private $var - 它不是 - 它也會導致解析錯誤。有沒有辦法讓PHP能知道,當你說:

private $var = $vars['ALL']; 

,你實際上是在說「我想的這 - $>值瓦爾[‘ALL’]被分配到這個 - $> VAR」 ,至少不是你寫它的方式。這就是爲什麼你可以在一個函數中做到這一點,在這個函數中你可以很容易地操作成員,比如你從構造函數中獲得的成員。

你應該聲明成員,他們的可見性並設置一些默認值(就像你爲$var所做的那樣),但是你不應該將他們指向其他成員的值,它只是 - 錯誤而且幸運 - 它不起作用: )

0

您試圖爲設計爲對象的一部分而不是類的變量賦值。你想要的是static變量。