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


 

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

14979. Қазақстанның жеті кереметі 55.5 KB
  Тақырыбы: Қазақстанның жеті кереметі. Мақсаты: оқушыларды Қазақстанның тарихи мұраларымен таныстырып мәдениетке дегн қызығушылығын арттырып тәрбиелеу. 1оқушы:Бүгін маған керек емес ертегі Ертегіні өз басымда шертеді. Та...
14980. Разработка Алкотестера (алкометра) 818.16 KB
  Алкометр— средство измерений, предназначенное для измерения концентрации алкоголя в выдыхаемом человеком воздухе или в крови человека по выдыхаемому воздуху. Его погрешность нормирована, он подлежит метрологической поверке.
14981. Қаратау басындағы Қатынқамал үңгірі 93.5 KB
  ҚАРАТАУ БАСЫНДАҒЫ ҚАТЫНҚАМАЛ ҮҢГІРІ А.С. Тасенова Б.Е. Ерескенова №4 С.Сейфуллин атындағы орта мектебі Қызылорда қ. Қоғамның тарихи дамуы кезеңдерінде көптеген елді мекендермен қалалар өзінің бұрынғы маңызын жоғалтып кейде мүлдем құры...
14982. Қасиетті Түркі жері - Түркістан 51 KB
  ҚАСИЕТТІ ТҮРКІ ЖЕРІ ТҮРКІСТАН Қ.А. Шолпанқұлова. А.Р. Жүнісбекова Тараз мемлекеттік педагогикалық институты Тараз қ. ҮІІІ-ХҮІІ ғасырлар аралығында жазылған шығыс жазба деректерінің мәліметтерінде Түркістан атауы бірнеше мәнде қолданылады. Т
14983. ҚОЖА АХМЕТ ЯСАУИ КЕСЕНЕСІ 113.5 KB
  ҚОЖА АХМЕТ ЯСАУИ КЕСЕНЕСІ Сәулеттік ерекшелігі мен әлеуметтік қызметі күрделі Қожа Ахмет Ясауи кесенесіндегі жөндеу және қалпына келтіру жұмыстарының өзіндік сыры мол. Сондықтан да кесенедегі жөндеу және қалпына келтіру жұмыстарына арнайы тоқталудың маңы
14984. Меркі – түркілердің ежелгі мекені 126 KB
  Меркі – түркілердің ежелгі мекені Нұрсұлтан Назарбаев: Тарихы мол Меркі өңірі – еліміздің киелі өлкесі. Сол өңірдің тарихын атақты ұл – қыздарының еңбегі мен ерлігін келер ұрпаққа үлгі етіп көрсету өте бір маңызды еңбек деп санаймын. Меркі тарихы терең табиғ...
14985. Сығанақ алғашқы қазақ мемлекеті – Ақ Орданың астанасы 53.5 KB
  З. Қинаятұлы. Сығанақ алғашқы қазақ мемлекеті – Ақ Орданың астанасы Бүгінгі күнге дейін Көшпенділер отырықшы өркениет жасамаған сондықтан олар мемлекеттілік деңгейіне көтеріле алмаған деп қарайтын сыңыржақ пікірдің сеңі бұзылмай отыр. Әттегенай дейтін бір жағ
14986. Тараз – ежелгi ислам мәдениетi орталығы 90.5 KB
  Тараз ежелгi ислам мәдениетi орталығы Қазақстан тарихы терең мәдениеті бай мемлекет. Егемендікке қол жеткізгелі бері халқымыздың еңсесі көтеріліп дініміз бен рухани мәдениетіміздің жарық салалары өркендеп келеді. Қазақ тілінің мәртебесі де өз топырағында күн өтк...
14987. ТАРАЗ - ҚАЗАҚ МӘДЕНИЕТIНIҢ АЛТЫН БЕСIГI 37 KB
  ТАРАЗ ҚАЗАҚ МӘДЕНИЕТIНIҢ АЛТЫН БЕСIГI Кәнкиев Ә.Ш. Жүншеев Р.Е. Тараз қ. М.Х.Дулати атындағы ТарМУ Ежелгi Тараз Ұлы Жiбек жолын жалғап жататын турақты дипломатикалық және саудасаттык қарымқатынас жасалатың күре тамыры iспеттес. Бұл байланыс көпiрiнiң маңызы дүние