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


 

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

8411. Китай. Телевидению предписано стать серьезнее 126.5 KB
  Китай Телевидению предписано стать серьезнее Власти Поднебесной в борьбе за моральные устои общества убирают с телеэкранов развлекательные программы. В первую очередь пострадают различные реалити-шоу, поиски талантов, а также программы, помогающие о...
8412. Искусство Древнего Китая разных периодов 2.33 MB
  Искусство Древнего Китая Исследованиями археологов установлено, что территория Китая была населена уже со времен нижнего палеолита. Именно в Китае найдены самые древние остатки ископаемого человека (синантропа) вместе с примитивными каменными орудия...
8413. Искусство и костюм Китая 44.5 KB
  Искусство и костюм Китая. Китай, как и Индия, является одной из древнейших восточных цивилизаций. Искусство средневекового Китая складывалось в обстановке постоянного вторжения кочевых племен, которые привносили в его высокоразвитую культуру элемент...
8414. Архитектура Древнего Китая 2.77 MB
  Архитектура Древнего Китая Особенности градостроительства Древнего Китая Крепостные сооружения. Великая китайская стена. Культовое зодчество Древнего Китая Жилые здания Древнего Китая Принципы садово-парковой архитектур...
8415. Культура Древнего Китая. Даосизм и Конфуцианство 76 KB
  Культура Древнего Китая. Китай - огромная и самая населенная страна в мире, в которой живет множество разных народностей. В Китае проживают пятьдесят народностей, не считая китайской общности, состоящих из четырех основных этноязычных групп. Сегодня...
8416. Древнейший Китай 22 KB
  Древнейший Китай История Китая насчитывает по крайней мере семь тысячелетий, начиная с периода развитого неолита. Почти треть ее занимает эпоха древнекитайской цивилизации. Ее начало относят к рубежу III-II тысячелетий до х.э. Концом ее считают круш...
8417. Общая педагогика. Курс лекций 642 KB
  В пособии три части: в первой рассматриваются вопросы педагогических систем и технологий, во второй представлены сущностные характеристики современной дидактической системы проблемно-развивающего обучения и в третьей - раскрыты актуальные вопросы п...
8418. Політекономія. Конспект лекцій та плани семінарських занять 505 KB
  Тема 1. Політична економія як фундаментальна суспільна наука Лекція 1 План 1. Виникнення політичної економії і основні етапи її розвитку 2. Предмет політичної економії. 3. Економічні категорії та закони 4.Методи дослідження соціально-економічних яви...
8419. Зіставлення художнього відтворення зради у творах О. Кобилянської та Л. Костенко про народну поетесу-співачку 70.72 KB
  Цей аспект кохання постійно хвилює людські душі, не лишає байдужою жодну людину. Звісно, що й у літературі тема любові та зради – чи не найпоширеніша та найблагодатніша для творчого вияву митця.