69688

ОПЕРАТОР ЕКВІВАЛЕНТНОСТІ (===)

Лекция

Информатика, кибернетика и программирование

Іноді звичайний оператор порівняння == працює не зовсім коректно, точніше не так, як нам хочеться, в деяких ситуаціях навіть виходять міні-анекдоти. Розглянемо наступний приклад...

Украинкский

2014-10-08

28 KB

0 чел.

Тема 7: ОПЕРАТОР ЕКВІВАЛЕНТНОСТІ (===)

Іноді звичайний оператор порівняння == працює не зовсім коректно, точніше не так, як нам хочеться, в деяких ситуаціях навіть виходять міні-анекдоти. Розглянемо наступний приклад:

<?

$х   = 0;    //   число,   рівне   0

$s   = "";    //пустий   рядок

echo gettype($x)."\n";

echo gettype($s)."\n";
if    ($x==$s)    echo   "x   =s";
?>

Змінні $х і $s не можуть бути рівні навіть з логічної точки зору, програма спочатку виводить повідомлення про те, що змінна $х є цілим числом (integer), а змінна $s — рядком (string). A після цього програма повідомляє, що змінні рівні. Вся справа тому, що PHP трактує одну із змінних (яку саме — не знаю, оскільки і 0, і " " — це false, цілком може бути, що інтерпретатор вважає логічним обидві змінні), як логічну змінну, а якщо хоч би одна змінна логічна, то друга теж вважається логічною. Тому ми отримуємо false==false, отже, програма виведе рядок "x=s".

Щоб уникнути подібної ситуації, потрібно використовувати оператора еквівалентності = = =. Якщо модифікувати нашу програму так:

<?

$х   =   0;

//   число,   рівне   0

$s   =   "";   

//пустая   рядок

echo   gettype($x)."\n";

echo   gettype($s)."\n";

if    ($x===$s)    echo   "x   =s";

?>

то зараз рядок "x=s" виведена не буде. Проведемо ще один експеримент; з використанням масивів. Розумію, що про масиви в PHP ви ще нічого не знаєте, але зараз просто необхідно забігти небагато наперед.

<?

$A  =   array('l'=>'0001');   

//   використовуються   апострофи,   а не   лапки

$В   =   array('2'=>'0010');

if   ($А  ==   $B)   echo   "A=   -В".;

if    ($А   ===   $B)    echo   "A=   =   =B";

?>

Буде виведений перший рядок, але не друга. У версіях PHP 4.0.x і нижче масиви $А і $в перетворювалися в рядки "array", які і порівнювалися. Ось через це оператор == неправильно працював. Оператор === із самого початку позбавлений цього недоліку. Зараз у мене встановлена версія 4.1.2 (не найновіша), але в ній оператор == працює коректно.

Для оператора === повинен бути зворотний оператор !===, але його немає. Якщо ви напишете:

if    ($А   !===   $B)    echo   "A<>B";

ви отримаєте повідомлення про помилку. Але можна обійти цю незручність так:

if    (!($А   ===   $B))    echo   "A<>B";


 

А также другие работы, которые могут Вас заинтересовать

47198. Разработка системы бизнес-процессов, как инструмент повышения результативности действий персонала в поддержку стратегии компании (на примере компании «ИК Ист Коммерц») 1.08 MB
  Цель данного исследования заключалась в оптимизации портфеля БП и разработке критериев оценки эффективности организационной структуры департамента и протекающих процессов с целью повышения уровня обслуживания клиентов. Автор считал, что определение приоритетов усилий сотрудников по различным процессам и адекватное их содержание способно повысить эффективность работы Департамента брокерского обслуживания
47199. Разработка клиентоориентированной стратегии по выводу продукции в целевые розничные сети в интересах продвижения бренда компании на рынке В2В (на примере частного случая компании “Пластал”) 923.5 KB
  Исходя из отмеченного, главной целью предполагаемого исследования выступает разработка клиентоориентированной стратегии производственной компании по выводу продукции строительного назначения в целевые розничные сети (с сильными брендами) в интересах продвижения бренда компании на рынки В2В.
47201. Дослідження особливостей впровадження сучасних технологій безпроводових мереж WLAN 1.55 MB
  На сьогоднішній день саме вони набули найбільш стрімкого розвитку в Україні та Світі. В першу чергу цьому сприяє розвиток та розширення ринку пристроїв, які мають можливість підключення до безпроводових мереж. Ще одним важливим фактором в процесі утвердження Wi-Fi технологій є необхідність побудови мереж в умовах
47202. Предложения и рекомендации по дальнейшему использованию Интернет-коммуникаций в деятельности проекта «Инфодонск» 4.83 MB
  Теоретические основы Интернеткоммуникаций. Коммуникативные характеристики сети Интернет. Инструменты коммуникаций в сети Интернет. Интернеткоммуникации в деятельности проекта Инфодонск.
47204. Жүйелік ғарыш байланысында сигналдардың өтуі 344.5 KB
  Ионосфера әсері энергияны жұтуында көрініс табу мүмкін сигнал дисперсиясы демек белдеуде бір қалыпсыз уақытты тоқтаулар сигналдың мерцаниесі электрондар концентрациясының жергілікті жүйесіздер шашырату барысында пайда болған вращении плоскости поляризации линейно поляризованной волны фарадеево вращение ХЗ брат. Мына барлық эффекттер сигналдың жиілік шаршысына кері пропорционалды ал дисперсия жиілік кубіне. Сигналдың деңгейiнiң өзгерiстерi толқынның түзуi интерференциямен және жер бетiнен шағылған толқындары барысында болу...
47205. Затраты торгового предприятия и пути их оптимизации 662.5 KB
  Экономическое содержание затрат и издержек обращения торгового предприятия. Номенклатура статей издержек обращения. Анализ затрат позволяет своевременно отражать производственные затраты и контролировать ход выполнения плана по издержкам обращения расходования материальных трудовых и финансовых ресурсов. Эти затраты живого и общественного труда необходимые для доведения товаров до потребителей выраженные в денежной форме называются издержками обращения.
47206. Система автоматизации распараллеливания: отображение на мультипроцессор 481.5 KB
  Примеры HP 9000 Vclss Nclss; SMPcервера и рабочие станции на базе процессоров Intel IBM HP Compq Dell LR Unisys DG Fujitsu и др. Важным компонентом стандарта OpenMP является набор подпрограмм времени выполнения и переменных окружения задающих среду OpenMP: subroutine OMP_SET_NUM_THREDSN устанавливает число нитей равное N. integer function OMP_GET_NUM_THREDS возвращает число нитей в бригаде. integer function OMP_GET_THRED_NUM возвращает номер текущей нити из которой произошел вызов функции в бригаде.