Строка сравнения на бул - PullRequest
13 голосов
/ 09 мая 2011

Я почти уверен, что это простой фундаментальный недостаток в моих новых знаниях PHP, но я был удивлен, когда произошло следующее:

enter image description here

$result равно TRUE ... так почему же оно считается равным строке "email"? Я предполагаю, что это потому, что технически это bool, и это не ложь? Поэтому при сравнении со строкой (например, «электронная почта») возвращается значение true.

Должен ли я изменить свой метод, чтобы он возвращался как результат в виде string, содержащего "true" (вместо return true; в случае успеха), или есть другой способ сделать это?

Спасибо.

Ответы [ 3 ]

14 голосов
/ 09 мая 2011

Да, true равно (==) непустой строке. Не идентично (===), хотя.

Я предлагаю вам просмотреть таблицу сравнения типов .

3 голосов
/ 09 мая 2011

Возвращает true, потому что php попытается преобразовать что-то, чтобы иметь возможность сравнить их. В этом случае он, вероятно, пытается преобразовать строку с правой стороны в логическое значение, которое в этом случае будет истинным. И правда == правда, конечно, правда.

Делая $ result === "email" (triple =), вы говорите PHP, что он не должен выполнять преобразования и должен возвращать false, если типы не совпадают.

1 голос
/ 09 мая 2011

if($result === "email") добьется цели, но лично я бы никогда не пошел по этому пути.

...