2013-04-10 2 views
0

Есть ли способ, чтобы создать массив ключевых констант, как указано ниже в PHPPHP Constant значение ключа массива

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

Почему бы вам не использовать две константы? – elclanrs

+0

Посмотрите на этот .. http://stackoverflow.com/questions/4236771/how-to-create-const-arrays-of-instances-of-a-class-within-that-class –

ответ

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 show Parse error: синтаксическая ошибка, неожиданная '[' –

+1

@SheldonCooper Исправлена ​​ошибка, она работала только на 5.4 с символом '[]' –

3

Вы также можете сериализовать массив, а затем поместить его в константу:

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

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

. Это должен быть лучший ответ на этот вопрос. Но что касается реалистической реализации, я согласен с Джеком. – Sam

0

Я предложил бы использовать define("MYSQL_HOST","ip"); в другом файле PHP называется, позволяет сказать, что config.php, так что вы можете легко получить доступ к нему с MYSQL_HOST без вызывающие экземпляры класса или global $masterDb каждый раз, когда вы хотите его использовать.

Еще одно преимущество наличия config.php заключается в том, что вы можете легко изменять общие используемые переменные.

Смежные вопросы