Можно ли объявить массив как константу [дубликат]
этот вопрос уже есть ответ здесь:
PHP константы, содержащие массивы?
19 ответов
мы можем определить константу как
define("aconstant','avalue');
не можем ли мы определить массив таким образом, как показано ниже ?
define("months",array("January", "February", ---);
7 ответов:
обновление: это возможно в PHP 7 (ссылка)
// Works as of PHP 7 define('ANIMALS', array( 'dog', 'cat', 'bird' )); echo ANIMALS[1]; // outputs "cat"
ОРИГИНАЛЬНЫЙ ОТВЕТ
от php.net...
значение константы; только скалярные и нулевые значения разрешено. Скалярные значения-это целочисленные, плавающие, строковые или булевы значения. Можно определить константы ресурсов, однако это не так рекомендуется и может привести к непредсказуемым поведение.
$months = array("January,"February",...)будет просто замечательно.
можно использовать const для этой цели начиная с PHP 5.6 (через nikic).
const months = ["January", "February"]; var_dump("January" === months[0]);
вы можете поместить массивы внутри констант с помощью Хака:
define('MONTHS', serialize(array('January', 'February' ...)));но тогда вы должны
unserialize()постоянное значение, когда это необходимо, и я думаю, это не очень полезно.в качестве альтернативы, определить несколько констант:
define('MONTH_1', 'January'); define('MONTH_2', 'February'); ...и использовать
constant()функция для поиска значения:echo constant('MONTH_'.$month);
нет, вы не можете. Вижу PHP: синтаксис-руководство
только скалярных данных (boolean, integer, float и строка) может содержаться в константах. Можно определить константы как ресурс, но этого следует избегать, так как это может привести к неожиданным результатам.
Вы можете использовать формат JSON, чтобы сохранить массив в строку, а затем присвоить эту строку в константу.
$months = array("January","February","March"); define('MONTHS', json_encode($months));когда вы хотите использовать его:
$months = json_decode(MONTHS);
Если у вас должна быть константа, как насчет использования строки с разделителями и взрыва в массив?
define("MONTHS", "January;February;March"); $months = explode(";",MONTHS);
начиная с PHP 5.6, это возможно объявлять постоянные массивы. В связанной документации используется пример
const ARR = ['a', 'b'];. Вы также можете сделатьconst ARR = array('a', 'b');. Однако в 5.6 есть странная причуда: вы можете объявить постоянные массивы с помощьюconst, а неdefine(). Это исправлено в PHP 7.0.
Comments