2013-04-10 110 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的另一个好处是你可以很容易地修改常用的变量。