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

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

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

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.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела PHP на эту тему:
Обмен значениями без временных переменных
Получение дампа содержимого переменных в виде строк
Сериализация данных сложных типов в виде строки
Совместное использование переменных процессами
Создание динамического имени переменной

Вернуться в раздел: PHP / 5. Переменные