Можно ли объявить массив как константу [дубликат]



этот вопрос уже есть ответ здесь:



мы можем определить константу как



define("aconstant','avalue');


не можем ли мы определить массив таким образом, как показано ниже ?



define("months",array("January", "February", ---); 
469   7  
PHP

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

    Ничего не найдено.