#php #arrays #syntax
#php #массивы #синтаксис
Вопрос:
Какой из приведенных ниже правилен? В первом коде нет кавычек в массиве $_GET, а во втором есть, я знаю, что они должны быть у вас, когда это текстовая строка, но в данном случае это переменная, также как насчет того, если ключ является числом?
без кавычек
function arg_p($name, $default = null) {
return (isset($_GET[$name])) ? $_GET[$name] : $default;
}
в кавычках
function arg_p($name, $default = null) {
return (isset($_GET['$name'])) ? $_GET['$name'] : $default;
}
Комментарии:
1. Скобки есть
()
, а не''
нет. Последние представляют собой одинарные кавычки или апострофы.2. Когда вы говорите скобки (), вы имеете в виду () или скобки []? Если я не совсем запутался или вы отредактировали сообщение, похоже, что единственное различие между вашими двумя случаями — это одинарные кавычки вокруг ‘$name’.
3. Ответ Гамбо правильный. Кроме того, я бы отметил, что в этом случае версия без одинарных кавычек почти наверняка является ошибкой. он всегда будет вести себя одинаково, независимо от значения $name.
4. Кроме того, не пытаюсь вас запутать, но
$_GET["$name"]
на самом деле большую часть времени будет работать так же, как версия без кавычек, но это неверно5. @kip: почему это ошибка? Функция предназначена для возврата переменной запроса $ _GET, если она существует со значением $name, в противном случае возвращает значение в $default. Первая функция верна.
Ответ №1:
Первый будет использовать значение $name
в качестве ключа, в то время как второй будет использовать литеральную строку '$name'
в качестве ключа.
Комментарии:
1. @jasondavis: Я полагаю, вы имели в виду уведомление о неизвестном смещении * /* неизвестном индексе . Это потому, что вы должны проверить, существует ли этот элемент, прежде чем пытаться его прочитать. Это можно сделать одним из
isset
способов, другимarray_key_exists
.
Ответ №2:
В PHP $_GET["$name"]
и $_GET[$name]
идентичны, потому что PHP будет оценивать переменные внутри двойных кавычек. Это вернет ключ того, что хранит переменная $name
.
Однако $_GET['$name']
будет выполняться поиск самого $name
ключа, а не того, что содержит переменная $name
.
Если ключом является число, то $_GET[6]
, $_GET['6']
и $_GET["6"]
все синтаксически равны.
Ответ №3:
-
если ключ является переменной
$array[$key];
вам не обязательно заключать это в кавычки.
-
но если это буквальная строка, вы должны (это не строка, если вы не заключаете ее в кавычки)
$array[‘MyKey’];
и вы получите уведомление, если сделаете это следующим образом
$array[mykey];
Комментарии:
1. вы не получите ошибку для $array[mykey]. вы получите только уведомление PHP. проверьте thephpcode.blogspot.com/2009/09 /… подробнее об этом.
2. От
PHP 7.2
вы получите предупреждение PHP.3.
define('mykey','mykey');
готово, никаких уведомлений