Відмінності між версіями «Оператори еквівалентності PHP»

Матеріал з Вікі ЦДУ
Перейти до: навігація, пошук
(Створена сторінка: '''Оператори еквівалентності PHP''' У PHP, починаючи з PHP4 є оператор тотожного порівняння - по…)
 
Рядок 5: Рядок 5:
 
Наприклад, наступний код виведе, що значення змінних рівні:
 
Наприклад, наступний код виведе, що значення змінних рівні:
  
$a=10;
+
$a=10;
$b="10";
+
$b="10";
if($a==$b) echo "a и b равны"; // Выводит "a и b равны"
+
if($a==$b) echo "a і b рівні"; // Виводить "a і b рівні"
  
І це незважаючи на те, що змінна $а являє собою число, а $ b - рядок. Пепер розглянемо дещо інший приклад:
+
І це незважаючи на те, що змінна $а являє собою число, а $b - рядок. Пепер розглянемо дещо інший приклад:
  
$a=0; // ноль
+
$a=0; // нуль
$b=""; // пустая строка
+
$b=""; // порожній рядок
if($a==$b) echo "a и b равны"; // Выводит "a и b равны"
+
if($a==$b) echo "a і b рівні"; // Виводить "a і b рівні"
  
 
Хоча '''$a і $b''' явно не рівні навіть у звичайному розумінні цього слова, скрипт заявить, що вони співпадають. Чому так відбувається? Справа в тому, що якщо один з операндів логічного оператора може трактуватися як число, то обидва операнди трактуються як числа. При цьому порожній рядок перетворюється в 0, який потім і порівнюється з нулем. Не дивно, що оператор '''echo''' спрацьовує.  
 
Хоча '''$a і $b''' явно не рівні навіть у звичайному розумінні цього слова, скрипт заявить, що вони співпадають. Чому так відбувається? Справа в тому, що якщо один з операндів логічного оператора може трактуватися як число, то обидва операнди трактуються як числа. При цьому порожній рядок перетворюється в 0, який потім і порівнюється з нулем. Не дивно, що оператор '''echo''' спрацьовує.  
 
Проблему вирішує оператор еквівалентності '''=== (потрійне рівність)'''. Він не тільки порівнює два вирази, але також їх типи. Перепишемо наш приклад з використанням цього оператора:
 
Проблему вирішує оператор еквівалентності '''=== (потрійне рівність)'''. Він не тільки порівнює два вирази, але також їх типи. Перепишемо наш приклад з використанням цього оператора:
  
$a=0; // ноль
+
$a=0; // нуль
$b=""; // пустая строка
+
$b=""; // порожній рядок
if($a===$b) echo "a и b равны"; // Ничего не выводит
+
if($a===$b) echo "a і b рівні"; // Нічого не виводить
  
  
 
Ось тепер нічого виведено не буде. Але можливості оператора еквівалентності йдуть далеко за межі порівняння простих змінних. З його допомогою можна порівнювати також і масиви, об'єкти і т. д. Це буває іноді дуже зручно. Ось приклад:
 
Ось тепер нічого виведено не буде. Але можливості оператора еквівалентності йдуть далеко за межі порівняння простих змінних. З його допомогою можна порівнювати також і масиви, об'єкти і т. д. Це буває іноді дуже зручно. Ось приклад:
  
$a=array(’a’=>’aaa’);
+
$a=array(’a’=>’aaa’);
$b=array(’b’=>’bbb’);
+
$b=array(’b’=>’bbb’);
if($a==$b) echo "С использованием == a=b<br>";
+
if($a==$b) echo "З використанням == a=b<br>";
if($a===$b) echo "С использованием === a=b<br>";
+
if($a===$b) echo "З використанням === a=b<br>";
  
 
Якщо запустити представлений код, то буде виведено перше повідомлення, але не друге.
 
Якщо запустити представлений код, то буде виведено перше повідомлення, але не друге.
 
Відбудеться це з тієї причини, що, як ми вже говорили, операнди-масиви перетворюються у рядки '''array''', які потім і будуть порівнюватися. Оператор === позбавлений цього недоліку, тому працює вірно.
 
Відбудеться це з тієї причини, що, як ми вже говорили, операнди-масиви перетворюються у рядки '''array''', які потім і будуть порівнюватися. Оператор === позбавлений цього недоліку, тому працює вірно.
 
Для '''оператора ===''' існує і його '''антипод - оператор! ==='''
 
Для '''оператора ===''' існує і його '''антипод - оператор! ==='''

Версія за 13:30, 19 квітня 2010

Оператори еквівалентності PHP

У PHP, починаючи з PHP4 є оператор тотожного порівняння - потрійний знак рівності ===, або оператор перевірки на еквівалентність. PHP досить терпимо ставиться до того, що рядки неявно перетворюються в числа, і навпаки. Наприклад, наступний код виведе, що значення змінних рівні:

$a=10;
$b="10";
if($a==$b) echo "a і b рівні"; // Виводить "a і b рівні"

І це незважаючи на те, що змінна $а являє собою число, а $b - рядок. Пепер розглянемо дещо інший приклад:

$a=0; // нуль
$b=""; // порожній рядок
if($a==$b) echo "a і b рівні"; // Виводить "a і b рівні"

Хоча $a і $b явно не рівні навіть у звичайному розумінні цього слова, скрипт заявить, що вони співпадають. Чому так відбувається? Справа в тому, що якщо один з операндів логічного оператора може трактуватися як число, то обидва операнди трактуються як числа. При цьому порожній рядок перетворюється в 0, який потім і порівнюється з нулем. Не дивно, що оператор echo спрацьовує. Проблему вирішує оператор еквівалентності === (потрійне рівність). Він не тільки порівнює два вирази, але також їх типи. Перепишемо наш приклад з використанням цього оператора:

$a=0; // нуль
$b=""; // порожній рядок
if($a===$b) echo "a і b рівні"; // Нічого не виводить


Ось тепер нічого виведено не буде. Але можливості оператора еквівалентності йдуть далеко за межі порівняння простих змінних. З його допомогою можна порівнювати також і масиви, об'єкти і т. д. Це буває іноді дуже зручно. Ось приклад:

$a=array(’a’=>’aaa’);
$b=array(’b’=>’bbb’);
if($a==$b) echo "З використанням == a=b
"; if($a===$b) echo "З використанням === a=b
";

Якщо запустити представлений код, то буде виведено перше повідомлення, але не друге. Відбудеться це з тієї причини, що, як ми вже говорили, операнди-масиви перетворюються у рядки array, які потім і будуть порівнюватися. Оператор === позбавлений цього недоліку, тому працює вірно. Для оператора === існує і його антипод - оператор! ===