на моем локальном хосте работает PHP7, и я использую функцию define() для определения массива. Это работает нормально.
define('JOBS_CREATORS', ['[email protected]', '[email protected]']);
Как мы знаем, он работает в версии PHP7. Я погуглил и нашел const ключевое слово, которое работает в PHP5.6 или более ранней версии.
Насколько я знаю, const работает только внутри class.
Но я использую WordPress, поэтому мне нужно определить в файле functions.php.
Есть ли другой способ определить массив без использования class?
На самом деле, есть и другие PHP-сайты, и им требуется более низкая версия PHP. Вот почему я не могу обновить версию PHP.
Исправьте другие сайты, чтобы они не зависели от неподдерживаемых версий PHP, которые не получают исправления безопасности!
Вот почему такие платформы, как Docker, так хороши. С Docker вы можете запускать каждую из ваших систем в отдельном изолированном контейнере, чтобы все они могли запускать нужную им версию PHP (или любую другую), не мешая друг другу.






Это все еще возможно сделать в PHP 5.6, используя ключевое слово const (см. в этом посте):
Константы PHP, содержащие массивы?
const JOBS_CREATORS = ['[email protected]', '[email protected]'];
Спасибо за Ваш ответ. Я пробовал это, но, к сожалению, это не сработало. Это дает ошибку, константное значение не может быть обновлено.
можешь показать мне свой код? Конечно, вы не можете ОБНОВИТЬ константу... поэтому она называется константой. Если вам нужно обновить его, вы должны использовать переменную вместо константы
Вы можете обновить свою константу, чтобы вместо этого принимать сериализованный массив.
define('JOBS_CREATORS', serialize(['[email protected]', '[email protected]']));
тогда
if (in_array("[email protected]", unserialize(JOBS_CREATORS))){ ...
если вы собираетесь это сделать, используйте json_encode, а не serialize.
@Spudley, сериализация работает нормально. Есть ли отличия от json_encode вместо сериализации?
Сериализация имеет избыточный вес и слишком сложна (и иногда подвержена дырам в безопасности). Единственный правильный вариант использования для этого - если вы используете функцию сна/пробуждения для сохранения объекта между запусками.
Спасибо @Spudley за помощь :)
@GufranHasan Суть заключалась в сериализации данных, независимо от того, как вы это делаете. json_encode также является формой сериализации. Кстати, WordPress по-прежнему использует serialize для сохранения данных в базе данных.
Поскольку @Спадли предложил использовать json_encode, а не serialize. Я использовал json_encode и json_decode как:
Определенный:
define('JOBS_CREATORS', json_encode(['[email protected]', '[email protected]']));
Получающий:
echo '<pre>';print_r(json_decode(JOBS_CREATORS)); echo '</pre>';
Но ответ @TahaPaksu тоже полезен.
Спасибо, @Спадли и @TahaPaksu :)
Если ваш хостинг-провайдер все еще использует PHP 5.6, вам нужно подумать о поиске нового. Даже PHP 7.0 устарел настолько, что уже не поддерживается и считается устаревшим.