Разработчику. Сборник рецептов PHP
Задавайте вопросы

Операторы == и =: как избежать путаницы

Вернуться назад

Задача

Необходимо избежать случайного присваивания значения при сравнении переменной с константой.

Решение

Запись, представленную ниже:

if (12 == $dwarves) { ... }

следует предпочесть такой:

if ($dwarves == 12) { ... }

Если константу расположить слева, то использование оператора присваивания вызовет синтаксическую ошибку. Другими словами, PHP выразит недовольство, если написать:

if (12 = $dwarves) { ... }

но код:

if ($dwarves = 12) { ... }

выполнит молча, сначала присвоив значение 12 переменной $dwarves, а затем отработает код внутри блока. (Выражение $dwarves = 12 приравнивается к 12, что рассматривается как true.)

Обсуждение

Размещение константы слева от оператора сравнения приводит результат сравнения к типу константы. Это может вызвать ошибку при сравнении целого числа с переменной, которая может быть целым числом или строкой. Выражение 0 == $dwarves имеет значение true, когда переменная $dwarves равна 0, но оно также истинно, когда $dwarves содержит строку sleepy. Целое число (0) находится слева от оператора сравнения, поэтому перед сравнением PHP преобразует правую часть (строку sleepy) в целое число (0). Во избежание этого вместо оператора сравнения следует применять оператор тождества 0 === $dwarves.

Вернуться назад

Рейтинг@Mail.ru

Яндекс.Метрика

Индекс цитирования

Рейтинг Сайтов ДОСКИ.РУ