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


 

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

74536. Периферийные устройства 17.62 KB
  Однако абсолютное большинство компьютеров используются вместе с теми или иными периферийными устройствами. Выделяют три основных типа периферийных устройств: Устройства ввода использующиеся для ввода информации в компьютер: мышь клавиатура сенсорный экран сканер вебкамера и видеозахват Устройства вывода например мониторы принтеры Устройства хранения служащие для накопления информации обрабатываемой компьютером: НЖМД НГМД ленточные и дисковые устройстванакопители флеш Иногда периферийное устройство относится к нескольким типам...
74537. Компьютерная сеть. Архитектура сети 22.52 KB
  Computer NetWork от net сеть и work работа совокупность компьютеров соединенных с помощью каналов связи и средств коммутации в единую систему для обмена сообщениями и доступа пользователей к программным техническим информационным и организационным ресурсам сети. Компьютерную сеть представляют как совокупность узлов компьютеров и сетевого оборудования и соединяющих их ветвей каналов связи. Компьютеры могут объединяться в сеть разными способами.
74538. Классификация компьютерных сетей 16.75 KB
  Корпоративная или региональная сеть создаётся крупными предприятиями корпорациями банками средствами массовой информации или территориями для обмена информацией между удалёнными абонентами. Глобальная сеть образуется в результате объединения сетей различного масштаба использования полного...
74540. HTTP. HyperText Transfer Protocol - протокол передачи гипертекста 17.41 KB
  HyperText Trnsfer Protocol протокол передачи гипертекста протокол прикладного уровня передачи данных. HTTP используется также в качестве транспорта для других протоколов прикладного уровня таких как SOP XMLRPCWebDV. Особенностью протокола HTTP является возможность указать в запросе и ответе способ представления одного и того же ресурса по различным параметрам: формату кодировке языку и т. Именно благодаря возможности указания способа кодирования сообщения клиент и сервер могут обмениваться двоичными данными хотя данный...
74541. WWW. World Wide Web 14.77 KB
  Годом рождения Всемирной паутины считается 1989 год. Именно в этом году Тим БернерсЛи предложил общий гипертекстовый проект который получил впоследствии название Всемирной паутины. Создатель паутины Тим БернесЛи работая в лаборатории физики элементарных частиц европейского центра ядерных исследований CERN В Женеве Швейцария совместно с партнером Робертом Кайо занимались проблемами применения идей гипертекста для построения информационной среды которая упростила бы обмен информацией между физиками. Итогом данной работы явился...