Это не удалось:
define('DEFAULT_ROLES', array('guy', 'development team'));
Видимо, константы не могут содержать массивы. Каков наилучший способ обойти это?
define('DEFAULT_ROLES', 'guy|development team');
//...
$default = explode('|', DEFAULT_ROLES);
Это кажется ненужным усилием.
Ответы:
ПРИМЕЧАНИЕ: хотя это и является принятым ответом, стоит отметить, что в PHP 5.6+ у вас могут быть массивы const - см. Ответ Андреа Фолдса ниже .
Вы также можете сериализовать свой массив и затем поместить его в константу:
источник
$fruit = FRUITS[0];
Начиная с PHP 5.6, вы можете объявить константу массива с помощью
const
:Короткий синтаксис тоже работает, как и следовало ожидать:
Если у вас есть PHP 7, вы можете, наконец, использовать
define()
, как вы сначала попробовали:источник
define()
здесь в PHP 5.6, но это было исправлено в PHP 7.0 . :)Вы можете хранить их как статические переменные класса:
Если вам не нравится идея, что массив может быть изменен другими, может помочь геттер:
РЕДАКТИРОВАТЬ
Начиная с PHP5.4, можно даже получить доступ к значениям массива без необходимости использования промежуточных переменных, т.е. работает следующее:
источник
const AtomicValue =42; public static $fooArray = ('how','di')
Я использую это так. Надеюсь, это поможет другим.
config.php
В файле, где мне нужны константы.
источник
Это то, что я использую. Это похоже на пример, предоставленный soulmerge, но таким образом вы можете получить полный массив или только одно значение в массиве.
Используйте это так:
источник
Вы можете сохранить его в виде строки JSON в константе. И с точки зрения приложения, JSON может быть полезен в других случаях.
источник
Начиная с PHP 5.6, вы можете определять постоянные массивы, используя
const
ключевое слово, как показано нижеи различные элементы могут быть доступны, как показано ниже:
Начиная с PHP 7, постоянные массивы могут быть определены,
define
как показано ниже:и различные элементы могут быть доступны так же, как и раньше.
источник
Я знаю, что это старый вопрос, но вот мое решение:
Я определил его, потому что мне нужно было хранить объекты и массивы в константах, поэтому я установил также runkit в php, чтобы я мог сделать переменную $ const суперглобальной.
Вы можете использовать его как
$const->define("my_constant",array("my","values"));
или просто$const->my_constant = array("my","values");
Чтобы получить значение просто позвоните
$const->my_constant;
источник
__get
и__set
должен сказать, что этот метод великолепен.PHP 7+
Начиная с PHP 7, вы можете просто использовать функцию define () для определения константного массива:
источник
Может даже работать с ассоциативными массивами .. например, в классе.
источник
Используя функцию взрыва и взрыва, мы можем импровизировать решение:
Это будет эхом
email
.Если вы хотите, чтобы это оптимизировало его больше, вы можете определить 2 функции, которые будут выполнять повторяющиеся действия для вас следующим образом:
Надеюсь, это поможет . Удачного кодирования.
источник
Делать какие-то трюки с сер / дезер или кодировать / декодировать кажется уродливым и требовать, чтобы вы помнили, что именно вы сделали, когда пытаетесь использовать константу. Я думаю, что закрытая статическая переменная класса с аксессором - неплохое решение, но я сделаю вам лучше. Просто используйте публичный статический метод получения, который возвращает определение константного массива. Это требует минимум дополнительного кода и определение массива не может быть случайно изменено.
Если вы действительно хотите, чтобы это выглядело как определенная константа, вы можете дать ей имя с заглавными буквами, но тогда было бы непонятно добавлять скобки '()' после имени.
Я полагаю, вы могли бы сделать метод глобальным, чтобы он был ближе к функциональности define (), о которой вы просили, но вы все равно должны ограничить имя константы и избегать глобальных переменных.
источник
Вы можете определить как это
источник
Да, Вы можете определить массив как константу. Начиная с PHP 5.6 , можно определить константу как скалярное выражение, а также можно определить константу массива . Можно определить константы как ресурс, но этого следует избегать, так как это может привести к неожиданным результатам.
С ссылкой по этой ссылке
Удачного кодирования.
источник
Если вы смотрите это с 2009 года, и вам не нравятся AbstractSingletonFactoryGenerators, вот несколько других вариантов.
Помните, что массивы «копируются» при назначении или в этом случае возвращаются, так что вы практически каждый раз получаете один и тот же массив. (См. Поведение массивов при копировании при записи в PHP.)
источник
если вы используете PHP 7 и 7+, вы также можете использовать fetch
источник
Константы могут содержать только скалярные значения, я предлагаю вам сохранить сериализацию (или JSON-кодированное представление) массива.
источник