Сравнение строк PHP без кавычек - PullRequest
7 голосов
/ 04 мая 2010

Из того, что я знаю о PHP, следующий синтаксис: не допустимый:

if ($s == Yes)

Вместо этого оно должно быть записано как:

if ($s == 'Yes')

Однако первый пример работает просто отлично. Кто-нибудь знает почему?

Ответы [ 6 ]

13 голосов
/ 04 мая 2010

Обычно это интерпретируется как константа, но если PHP не может найти константу по этому имени, он предполагает, что это строковый литерал, несмотря на отсутствие кавычек. Это сгенерирует сообщение E_NOTICE (которое может быть невидимым, в зависимости от вашего уровня сообщения об ошибках); что-то вроде:

Примечание: использование неопределенной константы Да - предполагается, что в файле script.php указано «Да» в строке 3

По сути, PHP слишком мягок.

8 голосов
/ 04 мая 2010

Короче говоря, PHP действует так, как если бы там были кавычки.

Если PHP не распознает что-то как зарезервированный токен, он обрабатывает его как строковый литерал.

В журнале ошибок появится предупреждение об этом.

1 голос
/ 04 мая 2010

Вам нужно включить как error_reporting, показывающий уведомления, так и display_errors.

error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', '1');

if ($s == Yes) {
  // foo
}
1 голос
/ 04 мая 2010

Первый не является строкой.

И это не работает нормально:

error_reporting(E_ALL);
if ($s == Yes) {}

Это наследие тех времен, когда PHP был просто интерпретатором форм «Довольно домашней страницы» и в настоящее время сильно не одобряется.

0 голосов
/ 04 мая 2010

PHP внутренне преобразует Да в «Да», если константа Да не определена.

Кстати ... Если то, что вы хотите, сравнивает, если $ s имеет "Да" в качестве значения, а является строкой, то вам нужно

а) использовать strcmp или б) использовать тождественный оператор "==="

0 голосов
/ 04 мая 2010

В PHP это Да будет рассматриваться как константа. Если константа не определена, она предполагает, что вы имели в виду строку «Да». Он должен генерировать уведомления, если они включены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...