Intereting Posts
Что произойдет, если пользователь выйдет из браузера или сменит страницу до того, как будет выполнен запрос AJAX Как поместить транзакцию begin-commit в контроллер: cakephp? Установка PHP tmp dir – загрузка PHP не работает Почему PHP печатает знак процента, когда мой скрипт завершен? Объединить значения n массивов в php Являются ли глобальные переменные в PHP плохой практикой? Если да, то почему? Laravel – Вызов Перенаправления :: в () изнутри Ограничить unserialize () для возврата массивов? Как получить снимок или миниатюру веб-страницы с помощью PHP? перенаправить пользователя после нажатия ссылки на процесс sql? API Google Диска (PHP) не может просматривать файлы Загрузка видео на Youtube с использованием API данных Youtube V3 и клиента API Google PHP – получение сообщения 401 (несанкционированное) MySQL «NOT IN» запрашивает 3 таблицы Как преобразовать массив в таблицу html Laravel 5.2, auth :: check вернуть true после входа в систему, но false после перенаправления

Доступ к массиву PHP без кавычек

Я постучал в явление в существующем php-источнике, с доступом к полю без апострофа, как это: $ _GET [test].

Я не уверен, также не знаю, что это возможно, поэтому я написал короткий пример для тестирования:

echo "Array Test, fields without apostrophe, like \$_GET[fieldname]<BR><BR>"; $a = array(); $a['test'] = "ArrayValue"; echo "case 1 -> \$a['test']: " . $a['test'] . "<BR>"; echo "case 2 -> \$a[\"test\"]: " . $a["test"] . "<BR>"; echo "case 3 -> \$a[test]: " . $a[test] . "<BR>"; 

И он работает, каждый результат получил значение (ArrayValue).

Я предпочитаю метод доступа, например, случай 2.

Является ли случай 3 нормальным, допустимым стилем кодирования в php?

Что здесь происходит, так это то, что PHP видит постоянный вызов test . Если константа определена, значение возвращается, оно не определено, PHP возвращается к строке "test" . Например:

 $array = array("A" => "Foo", "B" => "Bar", "C" => "Baz") define("B", "C"); echo $array[A]; // The constant "A" is undefined, // so PHP falls back to the string "A", // which has the value "Foo". echo $array["B"]; // The result is "Bar". echo $array[B]; // The value of constant "B" is the string "C". // The result is "Baz". 

Это для обратной совместимости, и вы никогда не должны ее использовать. Если вы включите уведомления , вы увидите, что PHP жалуется на это.

Если вы не поместите ключ в кавычки, он будет обрабатываться как неопределенная константа (при условии, что он нигде не определен), который может работать до сих пор, но может не работать в будущих версиях PHP. Поэтому это просто неправильно, и в документации на PHP этот вариант также неверен. Проверьте « Массивы делают и не делают ».

Кстати: если вы поместите ключ в двойные кавычки, он отображает переменные внутри имени ключа.

Использование имен ключей массива без кавычек является устаревшей функцией PHP. Первоначально это было сделано, но оно больше не рекомендуется и поддерживается только для обратной совместимости. Если вы включили строгий режим, он выдаст предупреждающее сообщение.

Причина в том, что он видит ключевое имя в этой форме как константу. Когда PHP видит неизвестную константу, по умолчанию используется имя константы в качестве значения, поэтому она работает как замена строки.

Это сломалось бы, если бы вы define() другом месте вашей программы, которые задали значение этой константы. Он также не работает, если ваше ключевое имя содержит пробелы, начинается с цифры или является недопустимым постоянным именем по любой другой причине.

По этим причинам не рекомендуется использовать этот метод.

Но, прежде всего, разработчики PHP публично заявили, что это не хорошая практика, что вполне может означать, что будущие версии PHP исключают возможность писать такой код.