Обычное и эквивалентное равенство в php

Обычное равенство в php подразумевает приведение типов. При попытке сравнить два значения с разными типами, php попытается автоматически привести их к одному типу. Например выражение

// равенство и эквивалентность
$a = false;
$b = 0;

if ($a == $b) {
    echo '$a и $b равны' . "\n";
}

if ($a != $b) {
    echo '$a и $b не равны' . "\n";
}

выведет результат

$a и $b равны

Эквивалентное равенство подразумевает одинаковость как типа, так и значения. Например:

$a = false;
$b = 0;

if ($a === $b) {
    echo '$a и $b эквивалентно равны' . "\n";
}

if ($a !== $b) {
    echo '$a и $b эквивалентно не равны' . "\n";
}

Ведет себя несколько отлично от обычного равенства:

$a и $b эквивалентно не равны

Для закрепления понимания разницы между обычным и эквивалентным равенством, рассмотри реальный пример:

Перед нами стоит задача определить, входит ли символ в строку.

$string = 'hello';
$search = 'h';

Для решения задачи воспользуемся функцией strpos, которая возвращает либо индекс вхождения искомой подстроки в строку (натуральное число — 0, 1, 2, 3), либо false.

Отличить целое положительное число от false конечно не проблема, а вот чтобы отличить 0 от false нужно проверка именно на эквивалентное равенство:

echo "Проверка на обычное неравенство\n";

if (strpos($string, $search) != false) {
    echo "'$search' найден в строке '$string'";
} else {
    echo "'$search' не найден в строке '$string'";
}

echo "\n";
echo "Проверка на эквивалетное неравенство\n";

if (strpos($string, $search) !== false) {
    echo "'$search' найден в строке '$string'";
} else {
    echo "'$search' не найден в строке '$string'";
}

Результат выполнения данного кода будет:

Проверка на обычное неравенство
'h' не найден в строке 'hello'
Проверка на эквивалетное неравенство
'h' найден в строке 'hello'

Потыкать вживую приведенные примеры можно тут https://implode.io/aTubDK