2010-05-29 194 views
1
class Person { 
    public static function ShowQualification() { 
    } 
} 

class School { 
    public static $Headmaster = new Person(); // NetBeans complains about this line 
} 

爲什麼不能這樣做?在PHP中初始化靜態成員

我希望能夠利用這個像

School::Headmaster::ShowQualification(); 

..無任何實例類。我該怎麼做?

更新:好吧,我明白了爲什麼。有人可以解釋如何部分?謝謝:)

+0

靜態屬性也被稱爲類的屬性相反的對象屬性。你爲什麼只想要*所有*學校的*校長? – Gumbo 2010-05-29 06:49:47

+0

請不要在語義上看它。我無法發佈我的專有代碼。我只是想到了一個愚蠢的例子。不妨將它們命名爲abc和xyz:D – Senthil 2010-05-29 06:54:10

回答

3

the docs

「像任何其他PHP靜態變量, 靜態屬性可以僅 使用文字或 恆定初始化;表達式不 不允許」。

new Person()不是一個文字或常量,所以這是行不通的。

您可以使用一個變通:

class School { 
    public static $Headmaster; 
} 

School::$Headmaster = new Person(); 
+0

您的答案被引用,我理解「爲什麼」部分。但*如何*我應該修改我的代碼,以便我可以使用所描述的類? – Senthil 2010-05-29 06:45:43

+0

+1謝謝:)只是出於好奇,人們如何生活呢? PHP是一種廣泛用於Web開發的語言,我很驚訝我們必須這樣做... – Senthil 2010-05-29 06:49:31

+0

@Senthil:因爲它不是世界的盡頭,而且它的功能很小? – 2011-03-16 11:09:55

-2

new Person()是操作,而不是一個值。

像任何其他PHP靜態變量, 靜態屬性可以僅 使用文字或 恆定初始化;表達式是不允許的。 因此,儘管您可以將靜態 屬性初始化爲整數或數組(對於 實例),但您可能不會將其初始化爲 爲其他變量,返回值爲函數 或對象。

http://php.net/static

您可以初始化學校類的一個對象:

class School { 
    public static $Headmaster; // NetBeans complains about this line 
    public function __construct() { 
    $this->Headmaster = new Person(); 
    } 
} 

$school = new School(); 
$school->Headmaster->ShowQualification(); 
+0

嗨,我不想實例化。我只想使用它們,如Class1 :: Member1 :: SubMember。 – Senthil 2010-05-29 06:57:19

+2

-1。你不能使用$ this作爲靜態變量。 – 2010-05-29 08:34:44

+0

您不能使用$ this作爲靜態變量,並且沒有任何意義實例化對象以訪問靜態變量。 – 2013-03-12 20:52:48