Gli operatori di confronto sono spesso un aspetto trascurato di PHP, il che può portare a molti risultati inaspettati. Uno di questi problemi deriva dai conforonti stretti (i confronti di valori booleani come se fossero interi).
<?php $a = 5; // 5 come intero var_dump($a == 5); // confronta il valore; restituisce vero var_dump($a == '5'); // confronta il valore (ignora il tipo); restituisce vero var_dump($a === 5); // confronta tipo/valore (intero e intero); restituisce vero var_dump($a === '5'); // confronta tipo/valore (intero e intero); restituisce falso /** * Confronti stretti */ if (strpos('testing', 'test')) { // 'test' è trovato alla posizione 0, che è interpretato come il booleano falso // codice... } // contro if (strpos('testing', 'test') !== false) { // vero, perché è stato fatto un confronto stretto (0 !== false) // codice... }