Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

 
liveinternet.ru: показано количество просмотров и посетителей

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
о проявляется как раз в 
инструкции 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 

Часть IV. Стандартные функции PHP 208 
if($zero==="") echo 7 // Самый лучший способ, но не действует в PHP 3 
Получается, что в операциях сравнения пустая строка "" прежде всего трактуется 
как 
0 (ноль) и уж затем — как "пусто"? Это звучит довольно парадоксально, но это 
дей- 
ствительно так. Операнды сравниваются как строки только в том случае, если они 
оба — строки, в противном случае идет числовое сравнение. При этом пустая 
строка 
воспринимается как 0, впрочем, как и любая другая, которую интерпретатору не 
уда- 
лось перевести в число. 
В первых версиях PHP 3 при присоединении к числовому нулю пустой строки 
этот ноль не менял типа, не становился строкой "0". Видимо, срабатывала ка- 
кая-то оптимизация, и PHP просто пропускал этот бессмысленный, на его 
взгляд, шаг. Проведенные мной тесты показывают, что в PHP версии 3.0.12 и 
старше эта ошибка исправлена, но все же иногда нужно иметь ее в виду, осо- 
бенно, если сценарии должны быть хорошо переносимыми. 
Итак, если вы хотите сравнить две переменные-строки, нужно быть абсолютно уве- 
ренными, что их типы именно строковые, а не числовые. 
Впрочем, это не распространяется на новый оператор PHP версии 4 === (тройное 
ра- 
венство, или оператор эквивалентности). Его использование заставляет 
интерпрета- 
тор всегда сравнивать величины и по значению, и по их типу. Итак, с точки 
зрения 
PHP 0=="", но 0!==="". Если вы не собираетесь программировать на PHP версии, 
ниже третьей, рекомендую всегда использовать === вместо strval(), как это было 
сделано в листинге 12.1. 
Существует одна стандартная ошибка, которую делают многие. Вот в чем она состо- 

ит. Есть такая функция — strpos($str,$what), которая возвращает позицию под- 
строки $what в строке $str или false, если подстрока не найдена. Пусть нам 
нужно 
проверить, встречается ли в некоторой строке $str подстрока 
		
 
<<-[Весь Текст]
Страница: из 287
 <<-