Я постучал в явление в существующем 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 исключают возможность писать такой код.