2010-10-28 146 views
13

我會用它們來實現factory模式,例如:PHP - 爲什麼我無法聲明靜態常量變量?

class Types{ 
    static const car = "CarClass"; 
    static const tree = "TreeClass"; 
    static const cat = "CatClass"; 
    static const deathstar = "DeathStarClass"; 
} 

而且我想使用它們,如:

$x = new Types::car; 

這可能嗎?

而如果我的類construcor已parametr,不工作:

$x = new Types::car(123); 
+3

你的意思是,一個靜態常數,而不是一個動態常量? :) – 2010-10-28 19:26:00

+0

檢查編輯PLZ;) – 2010-10-28 19:28:26

+0

@John我還是不明白你的例子。你爲什麼要宣佈同樣的常數四次?預期的結果是什麼?像這樣的'const'關鍵字應該可以工作,只需要關閉'static'即可。對於一個常量來說這沒有意義。 – 2010-10-28 19:29:04

回答

21

你的代碼應該是:

class Types{ 
    const car = "CarClass"; 
    const tree = "TreeClass"; 
    const cat = "CatClass"; 
    const deathstar = "DeathStarClass"; 
} 

注意,由於常數是綁到類定義,它們根據定義是靜態的。

從文檔:

作爲PHP 5.3.0的,它可能 參考使用可變的類。 變量的值不能是 關鍵字(例如,self,parent和 static)。

http://www.php.net/manual/en/language.oop5.static.php

更多信息:

http://php.net/manual/en/language.oop5.constants.php

+0

OOO,exacly!我想實現!但是如果我的班級在建設者身上行事如何呢?我不能這樣做:'$ x = new Types :: car(123);'...:( – 2010-10-28 19:31:59

+3

@約翰:實例化一個變量類,首先將常量賦值給一個變量:'$ type = Types :: car; $ x = new $ type(123);' – BoltClock 2010-10-28 19:59:58

+0

我唯一要補充的是命名常量常量全部大寫 – Ice76 2017-11-03 17:38:01

1

這是一個常數。你不能改變它。所以沒有任何意義,你會有一個非靜態的常量成員。所以你不必將它們聲明爲靜態或類變量。

4

常量已經是靜態的,因爲它們並不依賴於類的實例。以下是如何定義它們並按照自己的意願使用它們:

class Types{ 
    const car = "CarClass"; 
    const tree = "TreeClass"; 
    const cat = "CatClass"; 
    const deathstar = "DeathStarClass"; 
} 

$x = Types::car; 
+0

您的意思是'Types :: car'。除此之外,+1 – 2010-10-28 19:31:32

相關問題