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


 

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

36990. Дослідження особливостей побудови діаграми класів 15.18 KB
  Завдання: Створити модель класів для описання неорієнтованих графів. Розширте діаграму класів з попереднього завдання додавши до неї відомості про розміщення вершин графу товщину та колір дуг. Створіть модель класів для опису орієнтованих графів.
36991. Основи роботи в середовищі MATLAB 255 KB
  Важливу роль у MTLB відіграють спеціалізовані групи програм пакети так звані Toolbox в яких зібрані функції для розвязування окремих класів задач наприклад PDE Toolbox Spline Toolbox та інші. Введення кожної команди виразу або функції повинно завершуватись натисненням клавіші Enter в результаті чого в командному вікні нижче введеної команди виводиться результат її виконання або інші повідомлення системи наприклад повідомлення про помилку. Вбудовані елементарні математичні функції В середовищі MTLB існує досить велика кількість...
36992. Знайомство з основними пристроями Photoshop 1.07 MB
  Створіть новий слой ShiftCtrlN. Примітка: для того щоб бачити координати курсору в області зображення у пікселях на панелі Info викликайте контекстне меню натиснувши на кнопку оберіть пункт меню Plette Options та в діалоговому меню Info Options змініть значення Rule Units на Pixels Продублюйте цей слой два рази. Для цього на панелі Lyers натисніть правою кнопкою миші по вашому слою та оберіть пункт контекстного меню Duplicte Lyer або перетягніть слой на значок Crete New Lyer. Виділіть слой натисніть CtrlT та вкажіть необхідний...
36993. Віддалена робота (OC Windows 2003 Server, OC Linux) 608.5 KB
  Rdmin одна з найкращих програм віддаленого адміністрування для платформи Windows яка дозволяє повноцінно працювати одразу на кількох віддалених компютерах за допомогою звичайного графічного інтерфейсу. Віддалене адміністрування Загальні завдання Підключення до іншого компютера за допомогою підключення до віддаленого робочого стола Підключення до робочого стола при ввімкнутому брандмауері Windows Використання служби Віддаленої допомоги Windows для надання допомоги в разі виникнення неполадок з компютером Надання службі...
36994. Методи видалення з води дисперсних біологічних домішок 131 KB
  Звичайно на руйнування бактеріальних клітин витрачається лише незначна частина хлору що вводиться в воду. Велика частина його йде на реакції з різними органічними і мінеральними домішками води що протікають з різною швидкістю. У залежності від концентрації хлору рН температури води й інших факторів вони можуть зупинятися на тій чи іншій стадії.
36995. Чисельне диференціювання 25.5 KB
  Чисельне диференціювання Задані похідна шуканої функції Fx та значення шуканої функції у певній точці F=x0. Необхідно побудувати графік функції Fx.2= Тестування бажано провести на: Fx = 2Fx x Fx = 2x Fx = sinx Метод РунгеКутта Аналогічно до попереднього методу задані похідна від шуканої функції y=Fx y та значення шуканої функції у початковій точці yx0=y0 Тоді обчислюємо за наступними формулами: k1=hFxn yn k2=hFxn2h 3 yn2h k1 yn1=ynk13k2 4.
36996. Приріст/ відємний приріст 186 KB
  На виконання цих команд витрачається один машинній цикл. Результат виконання операції записується в акумулятор. Завдання N Задача Дані 1 Написати програму виконання виразу над однобайтовими числами. b7EH Результат занести в ОЗУ за адресою [1b] =29 b=D 2 Написати програму виконання виразу над однобайтовими числами 2Hb результат занести у стек =43 b=F 3 Написати програму виконання виразу над однобайтовими числами.