Ces deux expressions sont-elles équivalentes? Si oui, pouvez-vous expliquer pourquoi? (Je suis un programmeur java):
if(!$someObject)
if($someObject!==null)
Merci
Ces deux expressions sont-elles équivalentes? Si oui, pouvez-vous expliquer pourquoi? (Je suis un programmeur java):
if(!$someObject)
if($someObject!==null)
Merci
Vous pouvez consulter un type comparisons table sur la php.net
Plus dans votre cas, si $someObject = true
, puis if($someObject!==null)
fonctionne mais if(!$someObject)
ne fonctionnera pas.
En PHP vous avez les deux types différents de comparaison, celui lâche (==
, !=
) et une stricte (===
, !==
).
if
fonctionne avec une comparaison lâche.
Le deuxième if
que vous utiliserez fonctionnera fondamentalement travailler avec la comparaison stricte, de sorte que les deux ne peuvent pas être équivalent.
La seule façon d'avoir un équivalent réel est de travailler avec le même "type" de comparaison dans les deux si.
if(!$someObject)
est équivalent à if($someObject == false)
seulement.
+1 pour le lien! – ircmaxell
if (!someObject)
égales if (!isset(someObject))
pas si '$ someObject = false' –
-1' isset' n'a rien à voir avec un test booléen. Bien sûr, si la variable n'est pas définie, essayer de l'utiliser génèrera une valeur nulle (et donc '! Null' est vrai), mais ce n'est pas égal à'! $ Var' ... Et @Colin: Pas si ' $ someObject' est '0',' '0'', '' '', 'false',' array() 'soit ... – ircmaxell
isset est de vérifier l'état de la variable, pas l'état des données type/valeur, exemple '$ a = false; var_dump (isset ($ a)); 'serait vrai. – RobertPitt
$ someObject! == null est plus restrictive à comparer! $ SomeObject, ! $ SomeObject retournerait vrai si $ someObject est non nul, '', false ou 0
ou '" 0 "', ou 'array()' –
en utilisant une expression telle que (! variable) correspond aux principaux négatifs tels que null,false,0
toute variable avec ces valeurs retournera true
en utilisant l'opérateur d'exclamation. et faux sans. Je suis sûr que vous connaissez vos types de données tels que booleons,strings,ints,doubles/floats
mais je ne suis pas sûr que vous compreniez comment les opérateurs logiques fonctionnent dans php, je vais vous donner un exemple.
$a = $b; //This would assign $b to $a, a single = is an assignment operator.
$a == $b; //this is a value comarison operator, iot matches the VALUE not the type.
$a === $b; //This is a VALUE & TYPE Comparison, this would batch the value and data-types
Theres quelques autres expressions que vous pouvez utiliser comme:
$a != $b; //This is negative version to the second expression above - the ==,
$a !== $b; //this is a negative VALUE & TYPE comparison - the ===
Jetez un oeil ici pour plus d'exemples en profondeur.
http://php.net/manual/en/language.operators.logical.php
Hope this vous aide
Ok, donc de comprendre pourquoi, nous allons créer une table de vérité pour la première instruction if.
!{statement}
est fondamentalement le même que de dire {statement} != false
.Maintenant, étant donné que {statement}
dans ce cas est une variable, il sera équivalent (==
) à false pour toutes ces conditions (compte tenu de la frappe libre, de sorte que tous ceux-ci sont équivalentes à false
pour un test ==
):
0
'0'
''
null
false
array()
Donc, si le {statement}
est égal à l'un de ces cas, la déclaration !{statement}
sera vrai (et donc le cas d'exécution)
Maintenant, la deuxième comparaison demande essentiellement si {statement}
n'est pas identique (à la fois en valeur et en type, ce qui correspond à la différence entre !==
et !=
) à null
. Depuis null
est spécial, la seule fois la seconde si ne passera pas est si {statement}
est exactement null
.
Donc non, ils ne sont pas interchangeables mais équivalents seuls. Le premier a beaucoup de cas où le si sera exécuté, et le second n'en a qu'un quand il ne sera pas ...
Notez que les variables PHP doivent commencer par un '$'. –
FYI, la réponse courte est "non" qu'aucune de ces réponses ne vient et dit. – mpen