Відмінності між версіями «Оператори еквівалентності PHP»
Bobchik (обговорення • внесок) |
|||
(не показана одна проміжна версія ще одного учасника) | |||
Рядок 16: | Рядок 16: | ||
Хоча '''$a і $b''' явно не рівні навіть у звичайному розумінні цього слова, скрипт заявить, що вони співпадають. Чому так відбувається? Справа в тому, що якщо один з операндів логічного оператора може трактуватися як число, то обидва операнди трактуються як числа. При цьому порожній рядок перетворюється в 0, який потім і порівнюється з нулем. Не дивно, що оператор '''echo''' спрацьовує. | Хоча '''$a і $b''' явно не рівні навіть у звичайному розумінні цього слова, скрипт заявить, що вони співпадають. Чому так відбувається? Справа в тому, що якщо один з операндів логічного оператора може трактуватися як число, то обидва операнди трактуються як числа. При цьому порожній рядок перетворюється в 0, який потім і порівнюється з нулем. Не дивно, що оператор '''echo''' спрацьовує. | ||
− | Проблему вирішує оператор еквівалентності '''=== ( | + | Проблему вирішує оператор еквівалентності '''=== (потрійна рівність)'''. Він не тільки порівнює два вирази, але також їх типи. Перепишемо наш приклад з використанням цього оператора: |
$a=0; // нуль | $a=0; // нуль | ||
Рядок 27: | Рядок 27: | ||
$a=array(’a’=>’aaa’); | $a=array(’a’=>’aaa’); | ||
$b=array(’b’=>’bbb’); | $b=array(’b’=>’bbb’); | ||
− | if($a==$b) echo "З використанням == a=b | + | if($a==$b) echo "З використанням == a=b"; |
− | if($a===$b) echo "З використанням === a=b | + | if($a===$b) echo "З використанням === a=b"; |
Якщо запустити представлений код, то буде виведено перше повідомлення, але не друге. | Якщо запустити представлений код, то буде виведено перше повідомлення, але не друге. | ||
Відбудеться це з тієї причини, що, як ми вже говорили, операнди-масиви перетворюються у рядки '''array''', які потім і будуть порівнюватися. Оператор === позбавлений цього недоліку, тому працює вірно. | Відбудеться це з тієї причини, що, як ми вже говорили, операнди-масиви перетворюються у рядки '''array''', які потім і будуть порівнюватися. Оператор === позбавлений цього недоліку, тому працює вірно. | ||
Для '''оператора ===''' існує і його '''антипод - оператор! ===''' | Для '''оператора ===''' існує і його '''антипод - оператор! ===''' | ||
+ | |||
+ | |||
+ | [[Оператори мови PHP]] |
Поточна версія на 08:18, 7 травня 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, які потім і будуть порівнюватися. Оператор === позбавлений цього недоліку, тому працює вірно. Для оператора === існує і його антипод - оператор! ===