2013-04-01 3 views
0
if ($fromcat == "true" || $fromcat == 1){ 

    error_log("binding to CAT " . $cat . " because pfc was " . $fromcat); 

} else { 

    error_log("binding to ROOM " . $room . " because pfc was " . $fromcat); 

} 

, пожалуйста, ознакомьтесь с приведенным выше кодом.Если заявление не соблюдается в PHP

Я думаю, что все согласны с тем, что если $fromcat равно 0, я никак не мог получить сообщение «привязка к CAT (...)» на моей консоли.

И все же, вот оно:

[01-Apr-2013 22:34:50] binding to CAT single because pfc was 0 

Как это вообще возможно? Вы не можете одновременно отображать слово CAT и число 0! PHP пьян?

+1

Что произойдет, если вы используете '' === оператор вместо '' ==? – Dai

+0

он работает! Благодаря! – Saturnix

+1

К сожалению, '0 ==" true "' истинно. – Gumbo

ответ

3

Используйте идентичный (===) оператор сравнения.

if ($fromcat === "true" || $fromcat === 1) { 

    error_log("binding to CAT " . $cat . " because pfc was " . $fromcat); 

} else { 

    error_log("binding to ROOM " . $room . " because pfc was " . $fromcat); 

} 

Вы пытаетесь сравнить $fromcat в строку "true". Если вы хотите сравнить его с логическим значением true, вы должны использовать $fromcat == true. В противном случае:

Если вы сравниваете число со строкой или сравниваете числовые строки, каждая строка преобразуется в число и выполняется сравнение численно.

Documentation

+0

Я этого не знал! Просто потратил весь день на работу, чтобы отследить эту ошибку и исправить ее ... Большое спасибо! Пометьте как можно скорее как можно скорее. – Saturnix

1

Это также хорошая идея, чтобы изменить порядок вашего состояния.

Так

if ($fromcat === "true" || $fromcat === 1) 

становится

if ('true' === $fromcat || 1 === $fromcat) 

Причина: PHP - reversed order in if statement