2011-12-22 2 views
6

Я столкнулся с проблемой, когда php обрабатывает «0» по-разному.PHP обрабатывал «0» как пустой?

Я бегу следующий сценарий на 2 разных машинах:

$a = "0"; 
if ($a) { 
    echo("helo"); 
} 

1) Локальная машина -> PHP 5.2.17 -> это лечится "0" действительным и распечатать 'вертолёт'

2) Сервер -> PHP 5.3.6 -> он обрабатывал «0» как пустой/ложный и не печатает «helo»

Это связано с конфигурацией php (если да, какая конфигурация) или php версия?

+4

PHP 5.2.17 (Win32) does * not * print "helo", когда '$ a =" 0 ";' (просто проверял его на CLI и через Apache, чтобы убедиться). У вас должен был быть и другой символ в строке - возможно, символ пробела, который был невидимым при печати, например '\ r'? – DaveRandom

ответ

5

Вот как это должно быть. PHP интерпретирует строки в булевом контексте. "0" эквивалентен фактическому 0. (Смотрите также http://www.php.net/manual/en/types.comparisons.php)

Что вы имели в виду, чтобы проверить это, вероятно:

if (strlen($a)) { 
+0

Но это не делалось в PHP 5.2.17? – Jaanus

2

if($a) должен быть FALSE, согласно documentation. Это также должно быть так на вашей локальной машине. Вы уверены, что на локальной машине у вас нет места после 0 или что-то еще? («0<space>» будет TRUE.)

0

Звук странно для меня, я думал, что „0“ было ложным, вы можете просмотреть here

0

PHP может interporate „0“ как ложь, как это будет equivilent в нуль/ложь/0.

Однако он также может связывать его как строку "0". Таким образом, оператор if вернет true, однако, я думаю, что это будет ошибка, если вы не нарисуете его (string).

Как сказал Марио, проверьте наличие strlen ($ a) или проверьте, есть ли (! Empty ($ a)) таким образом, что вы получите окончательный ответ.

Надеюсь, это поможет!

Смежные вопросы