Обычное равенство в 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