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


 

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

58498. Урок-путешествие «По следам Робинзона» 34.5 KB
  Озвучивается тема урока по следам Робинзона Крузо Задумывались ли вы когданибудь над тем существовал ли Робинзон Крузо этот мужественный герой в действительности и если да то где расположен его остров Дети высказывают предположения.
58499. Принципы, этапы контролируемой чистки. Способы мотивации пациента 51 KB
  Для мотивации пациента кабинет гигиены и профилактики предполагает обязательное наличие умывальника, зеркала и специальных средств, предназначенных для информирования пациентов...
58501. Весільні обряди в усній народній творчості. Веснянки, гаївки, заклички 40.5 KB
  Діти: Стрітення. Діти вибігали на вулицю і співали: Пташок викликаю З теплого краю. Ідіть діти і здоровте хлібом людей. Хто з вас знає які заклички Діти відповідають: Прийди до нас весно Із радістю із великою до нас милістю Із житом зернистим Із пшеницею золотою І вівсом кучерявим.
58502. Урок – гра «О, математик!» 45.5 KB
  Який гвіздок міцніше тримається у дерев’яній стіні (важче витягти із стіни) – круглий, квадратний чи трикутний, якщо їх забивають на одну глибину і площі їх поперечного перерізу рівні? (Трикутний, він має більшу бічну поверхню)
58504. Урок - игра: суд над сигаретой 49.5 KB
  Слушается дело о вреде курения табака сигареты. Сегодня моей задачей является разоблачение сигареты и курения как вредной привычки приносящей вред организму человеку юного растущего. Моя цель сорвать с сигареты покров романтики и мужественности показать её злостную сущность.
58505. КНЯЖА РУСЬ - УКРАЇНА 647.5 KB
  Дайте відповідь на питання яке ставили учням у часи Київської Русі. Скільки слідів залишить віл в останній борозні під час оранки Відповідь: жодного сліду тому що плуг сліди приоре.
58506. УРОК В РАМКАХ КЛАССНО-УРОЧНОЙ СИСТЕМЫ ОБУЧЕНИЯ 71 KB
  Определение понятия урок;экскурс в историю классноурочной системы обучения. Вот некоторые из них: 1 Урок это такая форма организации педагогического процесса при которой педагог в течение точно установленного времени руководит коллективной познавательной и иной деятельностью постоянной группы учащихся классов с учетом особенностей каждого из них используя виды средства методы работы создающие благоприятные условия для того чтобы все ученики овладевали основами изучаемого предмета непосредственно в процессе обучения а также для...