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";


 

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

6221. Лекарственные средства неорганической природы. Классификация. Вода очищенная и вода для инъекций. Фармакопейный анализ препаратов водорода пероксида 87 KB
  Лекарственные средства неорганической природы. Классификация. Вода очищенная и вода для инъекций. Фармакопейный анализ препаратов водорода пероксида Лекарственные препараты неорганической природы составляют значительную часть ассортимента лекарствен...
6222. Генетика онтогенеза 109.5 KB
  Генетика онтогенеза 1. Общая характеристика онтогенеза (самостоятельно) 2. Генетическая детерминация онтогенеза. Генотип и среда. Поливариантность онтогенеза. Программы онтогенеза 3. Механизмы реализации программ онтогенеза 1. Общая характеристика о...
6223. Гонорея. Хламидиоз. Трихомониаз 130.5 KB
  Содержание Гонорея. Хламидиоз. Трихомониаз. Определение Этиология Тактика среднего медицинского работника при данных заболеваниях Принципы лечения Особенности ухода за пациентами Диспансеризация Профилактика...
6224. Конкуренция и монополия 66.5 KB
  Конкуренция и монополия. Цели изучения темы: уяснение сущности и функций конкуренции, умение дифференцировать различные типы рыночных структур, измерение уровня концентрации рынка, понимание природы монополий. Основные термины и понятия: конкуренция...
6225. Перевод числа из инфиксной формы в постфиксную 199 KB
  Одной из главных причин, лежащих в основе появления языков программирования высокого уровня, являются вычислительные задачи, требующие больших объёмов рутинных вычислений. Поэтому к языкам программирования предъявлялись требования максима...
6226. Решение задач на языке программирования Pascal 323 KB
  Введение Паскаль (англ. Pascal) - это язык программирования общего назначения. Один из наиболее известных языков программирования, широко применялся в промышленном программировании, обучении программированию в высшей школе, является базой для р...
6227. Реализация компонента, осуществляющего перевод чисел в различные системы счисления 189.5 KB
  В курсовой работе разработан собственный компонент, осуществляющий перевод чисел в различные системы счисления. Реализация модулей, описанных при создании данного компонента, произведена в среде программирования Borland C++ Builder Содержание...
6228. Порівняння загальних характеристик роботи різних методів сортування 203 KB
  Вступ В даний час обчислювальна техніка проникла практично в усі сфери людської діяльності. За допомогою ЕОМ можна вирішувати найрізноманітніші завдання. Але для того, щоб вирішити поставлену задачу, необхідно вказати послідовність дій, виконання як...
6229. Теорія графів. Розвязок задачі на основі графів на мові C++ 583.5 KB
  Теорія графів - це галузь дискретної математики, особливістю якої є геометричний підхід до вивчення об'єктів. Вона перебуває зараз у самому розквіті. Розділ теорії графів Зв'язність графів, що розглядається у цій роботі, є дуже актуальною на сьогоднішній день. Наприклад її прямим застосуванням є теорія сітей – та її додаток - теорія електронних сітей...