Подтвердить что ты не робот

Можно ли объявить массив постоянным

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

define("aconstant','avalue');

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

define("months",array("January", "February", ---); 
4b9b3361

Ответ 1

ОБНОВЛЕНИЕ: это возможно в PHP 7 (ссылка)

// Works as of PHP 7
define('ANIMALS', array(
    'dog',
    'cat',
    'bird'
));
echo ANIMALS[1]; // outputs "cat"

ОРИГИНАЛЬНЫЙ ОТВЕТ

От php.net...

Значение константы; только скалярные и нулевые значения допускается. Скалярными значениями являются значения integer, float, string или boolean. Можно определить константы ресурсов, однако это не рекомендуется и может вызвать непредсказуемое поведение.

$months = array("January,"February",...) будет просто отлично.

Ответ 2

вы можете использовать const для этой цели с PHP 5.6 (через nikic).

const months = ["January", "February"];
var_dump("January" === months[0]);

Ответ 3

Вы можете помещать массивы внутри констант с помощью hack:

define('MONTHS', serialize(array('January', 'February' ...)));

Но тогда вы должны unserialize(), что постоянное значение, когда это необходимо, и я думаю, что это не очень полезно.

В качестве альтернативы определите несколько констант:

define('MONTH_1', 'January');
define('MONTH_2', 'February');
...

И используйте constant() функцию для поиска значения:

echo constant('MONTH_'.$month);

Ответ 4

Нет, вы не можете. См. PHP: синтаксис - руководство

В константах могут содержаться только скалярные данные (boolean, integer, float и string). В качестве ресурса можно определить константы, но этого следует избегать, так как это может вызвать неожиданные результаты.

Ответ 5

Вы можете использовать формат JSON для хранения массива в строке и затем назначить эту строку константе.

$months = array("January","February","March");
define('MONTHS', json_encode($months));

Если вы хотите его использовать:

$months = json_decode(MONTHS);

Ответ 6

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

define("MONTHS", "January;February;March");
$months = explode(";",MONTHS);

Ответ 7

С PHP 5.6 возможно объявлять постоянные массивы. Связанная документация использует пример const ARR = ['a', 'b'];. Вы также можете сделать const ARR = array('a', 'b');. Однако в 5.6 существует нечетная причуда: вы можете объявлять постоянные массивы с помощью const, но не define(). Этот был исправлен в PHP 7.0.