Нужно ли заключать ключи массива PHP в кавычки?

#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'); готово, никаких уведомлений