2013-04-10 145 views
0

有什麼辦法來創建像在PHP下文提到的關鍵常量數組php常量鍵值陣列

class MysqlConstants 
{ 
    const masterDb['HOST'] = "ip"; 
    const masterDb['user'] = "user"; 
} 
+0

爲什麼不使用兩個常量? – elclanrs 2013-04-10 05:22:40

+0

看一看這個.. http://stackoverflow.com/questions/4236771/how-to-create-const-arrays-of-instances-of-a-class-within-that-c​​lass – 2013-04-10 05:25:04

回答

4

不,這是不可能的;類常量必須是文字,而不是表達式。最接近的選擇是靜態屬性:

class MySqlConstants 
{ 
    public static $masterDb = array('HOST' => "ip", 'user' => "user"); 
} 

我個人不喜歡這種方法,因爲常量應該是不可變的。這將是一個更好的辦法:

class MySqlConstants 
{ 
    private static $masterDb = array('HOST' => "ip", 'user' => "user"); 

    public final static function getMasterDb() 
    { 
     return self::$masterDb; 
    } 
} 

最後你可以只分裂常數:

class MySqlConstants 
{ 
    const HOST = "ip"; 
    const user = "user"; 
} 

順便說一下,存儲代碼和配置,這並不是我會建議,除非他們的應用程序的常數;例如,將連接設置等存儲在ini文件中會更好,並使用parse_ini_file()來檢索它。

+0

ist showing Parse錯誤:語法錯誤,意外'[' – 2013-04-10 06:00:55

+1

@SheldonCooper修正,它只適用於5.4與'[]'符號:) – 2013-04-10 06:44:41

3

還可以序列的數組,然後把它放到常數:

# define constant, serialize array 
define ("CRED", serialize (array ("host"=>"ip", "user"=>"user"))); 

# use it 
$my_credential = unserialize (CRED); 
+0

這一定是迄今爲止問題的最佳答案。但就實際實施而言,我同意傑克的觀點。 – Sam 2013-04-10 05:55:03

0

我會建議在另一個名爲php文件使用define("MYSQL_HOST","ip");,可以說config.php文件,所以你可以很容易地​​訪問它,而不每次你想使用它的時候調用class或global $masterDb的實例。

有config.php的另一個好處是你可以很容易地修改常用的變量。