Réponses
Trop de publicités?Parce que vous utilisez l’opérateur == (similitude) et PHP est le fait de contraindre la chaîne en int.
Pour le résoudre utilisation le === (op_Equality), qui vérifie non seulement si la valeur est la même, mais aussi si le type de données est le même, donc la chaîne « 123 » et int 123 ne sera pas considérées égales.
En PHP et JavaScript, qui a un comportement légèrement différent), l'opérateur de comparaison ==
fonctionne différemment que dans la fortement typées langages comme le C ou le Java. L' ===
opérateur a le comportement que vous pouvez probablement s'attendre. Ci-dessous la répartition des deux opérateurs de comparaison tels qu'ils s'appliquent à PHP.
==
Cet opérateur est officiellement connu sous le nom de "l'égalité" de l'opérateur, même si ça ne correspond vraiment pas à la définition usuelle du mot "égalité". C'est ce qui est connu comme un type de jonglerie de comparaison. Si les types des deux opérandes ne correspondent pas (dans votre exemple, 1234
a un entier et d' 1234 test
est une chaîne de caractères), PHP va implicitement exprimés les opérandes de chaque autres types et de tester l'égalité de la nouvelle-valeurs typées comme indiqué ci-dessous:
<?php
var_dump( (int) 'hi' ); // int(0)
var_dump( (string) 0 ); //string("0")
var_dump( 'hi' == 0 ); // bool(true)
var_dump( (int) '1hi' ); // int(1)
var_dump( 1 == '1hi' ); // bool(true)
Il a une contrepartie (type de jonglerie) opérateur d'inégalité, !=
.
===
L' ===
opérateur, connu comme le "identiques" opérateur effectue un contrôle strict de la valeur et le type de chacun des opérandes et de ne pas effectuer les conversions implicites. Par conséquent, "0"
ne === 0
et "1234 test"
ne === 1234
.
<?php
var_dump( '1234 test' === 1234 ); // bool(false)
Il a une contrepartie (strict) opérateur d'inégalité, !==
.
Bizarreries
Notez que l' ===
opérateur a un comportement sur des objets qui est considéré comme étrange par certains. Dire que nous avons class A
et les variables $a
et $b
tel que défini ci-dessous:
<?php
class A {
public $property = 'default value';
}
$a = new A();
$b = new A();
Vous vous en doutez var_dump($a === $b);
sortie bool(true)
. Elle retourne false. Lorsque utilisé sur les objets, l'opérateur fait vérifie si les deux opérandes sont des références pour le même objet. L' ==
de l'opérateur, dans ce cas, les œuvres de la vérification des propriétés de l'objet, de sorte que $a == $b
.
Manuel PHP Liens
Lors de la conversion d’une chaîne à un entier, tous les caractères numériques jusqu’au premier caractère non numérique devient le nombre. Ainsi devient
car l’espace n’est pas un caractère numérique.
Ainsi``
Si vous voulez forcer une comparaison de chaînes, vous devriez effectuer un cast en string :
Vous êtes vaguement de la comparaison de deux différents types de données (un entier et une chaîne de caractères). PHP dispose d'une très détaillé graphique de la façon dont les comparaisons travail dans leur système lors de l'utilisation de la loose de comparaison opérateur binaire (==):
http://php.net/manual/en/types.comparisons.php
Si vous voulez vous assurer que les types sont également dans la synchronisation, c'est qu'ils sont tous les deux des entiers ou des deux cordes, d'utiliser le type de l'opérateur de comparaison (===).
Notez que, lors de l'utilisation de cet opérateur, ce sera aussi le retour de faux:
1234 === '1234'
Si vous n'êtes pas sûr de vos types lors de la comparaison, vous pouvez le couple le plus fort-type de comparaison avec PHP typecasting:
$a = 1234;
$b = '1234';
if ($a === $b) { } // Will not fire, as it is false
if ((int)$a === (int)$b) { } // Will fire, as it is true