Из того, что я знаю о PHP, следующий синтаксис не законен:
if ($s == Yes)
Это должно вместо этого быть записано как:
if ($s == 'Yes')
Однако первый пример работает просто великолепно. Кто-либо знает почему?
Обычно он интерпретируется как константа, но если PHP не может найти константу с таким именем, он предполагает, что это строковый литерал, несмотря на отсутствие кавычек. Это сгенерирует сообщение E_NOTICE (которое может быть невидимым, в зависимости от вашего уровня сообщения об ошибках); что-то вроде:
Примечание: использование неопределенной константы Да - предполагается «Да» в script.php в строке 3
В принципе, PHP слишком снисходителен.
Короче говоря, PHP действует так, как если бы там были кавычки.
Если PHP не распознает что-либо как зарезервированный токен, он обрабатывает это как строковый литерал.
В журнале ошибок будет отображаться предупреждение об этом.
Первый не является строкой.
И это не работает нормально:
error_reporting(E_ALL);
if ($s == Yes) {}
Это наследие тех времен, когда PHP был просто интерпретатором формы «Хорошая домашняя страница», и в настоящее время его сильно обескураживают.
В PHP это Yes будет рассматриваться как константа. Если константа не определена, он будет считать, что вы имели в виду строку 'Yes'. Это должно генерировать уведомление, если оно у вас включено.
PHP преобразует Yes в «Yes» внутренне, когда константа Yes не подлежит определению.
Кстати .. Если вы хотите сравнить, если $ s имеет значение «Да», а является строкой, тогда вы должны
а) использовать strcmp или б) использовать оператор идентификации "= == "
Вам нужно, чтобы и error_reporting показывал уведомления, и display_errors был включен.
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', '1');
if ($s == Yes) {
// foo
}