2010-09-12 3 views
2

Ces deux expressions sont-elles équivalentes? Si oui, pouvez-vous expliquer pourquoi? (Je suis un programmeur java):

if(!$someObject) 

if($someObject!==null) 

Merci

+0

Notez que les variables PHP doivent commencer par un '$'. –

+0

FYI, la réponse courte est "non" qu'aucune de ces réponses ne vient et dit. – mpen

Répondre

4

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.

+0

+1 pour le lien! – ircmaxell

-1

if (!someObject) égales if (!isset(someObject))

+2

pas si '$ someObject = false' –

+2

-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

+1

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

2

$ someObject! == null est plus restrictive à comparer! $ SomeObject, ! $ SomeObject retournerait vrai si $ someObject est non nul, '', false ou 0

+2

ou '" 0 "', ou 'array()' –

2

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

1

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 ==):

  1. 0
  2. '0'
  3. ''
  4. null
  5. false
  6. 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 ...

Questions connexes