Мы можем определить константу, подобную
define("aconstant','avalue');
Нельзя ли определить массив таким образом, как показано ниже?
define("months",array("January", "February", ---);
Мы можем определить константу, подобную
define("aconstant','avalue');
Нельзя ли определить массив таким образом, как показано ниже?
define("months",array("January", "February", ---);
ОБНОВЛЕНИЕ: это возможно в 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",...)
будет просто отлично.
вы можете использовать const для этой цели с PHP 5.6 (через nikic).
const months = ["January", "February"];
var_dump("January" === months[0]);
Вы можете помещать массивы внутри констант с помощью hack:
define('MONTHS', serialize(array('January', 'February' ...)));
Но тогда вы должны unserialize()
, что постоянное значение, когда это необходимо, и я думаю, что это не очень полезно.
В качестве альтернативы определите несколько констант:
define('MONTH_1', 'January');
define('MONTH_2', 'February');
...
И используйте constant()
функцию для поиска значения:
echo constant('MONTH_'.$month);
Нет, вы не можете. См. PHP: синтаксис - руководство
В константах могут содержаться только скалярные данные (boolean, integer, float и string). В качестве ресурса можно определить константы, но этого следует избегать, так как это может вызвать неожиданные результаты.
Вы можете использовать формат 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.