САМОУЧИТЕЛЬ PHP 4



     продукты из испании киев, уксусы. |     

О сравнении строк и инструкции if-else


Теперь я хотел бы рассмотреть одно тонкое место в интерпретаторе PHP, касающееся немного неправильной работы со строками. Заключается оно вот в чем. Если мы используем операторы сравнения ==

и !=

(или любые другие, которые могут потребовать перевода строки в число) с операндами-строками, то результат, вопреки ожиданиям, не всегда оказывается верным. Чаще всего это проявляется как раз в инструкции if. Вот примеры (листинг 12.1):

Листинг 12.1. Внимание! Опасное место!

$one=1   // ÷èñëî îäèí

$zero=0  // присваиваем ÷èñëî íоëü

if($one=="") echo 1    // î÷åâèäíî, íå ðàâíî— íå âûâîäèò 1

if($zero=="") echo 3   // Âíèìàíèå! Âîïðåêè îæèäàíèÿì ïå÷àòàåò 3!

if(""==$zero) echo 4   // È ýòî òîæå íå ïîìîæåò!..

if("$zero"=="") echo 5 // Не работает в некоторых версиях PHP 3

if(strval($zero)=="") echo 6; // Âîò òåïåðü ïðàâèëüíî — íå âûâîäèò 6

if($zero==="") echo 7  // Самый лучший способ, но не действует в PHP 3

Получается, что в операциях сравнения пустая строка "" прежде всего

трактуется как 0 (ноль) и уж затем — как "пусто"? Это звучит довольно парадоксально, но это действительно так. Операнды сравниваются как строки только в том случае, если они оба — строки, в противном случае идет числовое сравнение. При этом пустая строка воспринимается как 0, впрочем, как и любая другая, которую интерпретатору не удалось перевести в число.




Содержание  Назад  Вперед