2009-03-04 7 views
0

Je pense parfois que je n'ai pas besoin d'utiliser ELSEIF et ne pas répéter des choses en faisant peut-être plusieurs vérifications en ligne.Multiple Inline Conditions ET OU vs ELSEIF

Je l'ai déjà fait. J'essaye cette ligne simple et ne peux pas tout faire fonctionner.

Je lis que:

OU est le même que ||

ET est le même que & &

code (chemin court, mais ne fonctionne pas):

if($subdom<>'www' or $subdom<>'nosub') 
{do some stuff if any of the two are meet} 

J'ai aussi essayé ceci:

code:

if((subdom!='www') || ($subdom!='nosub')){} 

Quels seront les opérateurs corrects pour vérifier l'un des e deux? Est-ce || ou & &. Devrions-nous utiliser! = Ou <> aussi?

Quelques informations trouvées après la question a répondu:

$ par & & $ b
// Et // Vrai si $ a et $ b sont TRUE.

$ a || $ b
// Ou // VRAI si $ a ou $ b est VRAI.

Chacune de ces fonctionnera comme la comparaison:!

== (pas égal identique), mais pas = que cela signifie "ne pas à"
<> fera l'affaire sans trop de gaieté.

+0

Alors ... quelle est la question? – strager

+0

Question comment utiliser || ou && pour faire plusieurs conditions en ligne. – Codex73

+1

Votre nouvelle info est incorrecte,! = Fonctionne bien. –

Répondre

5

Votre expression est toujours vrai, compte tenu de votre exemple, vérifiez le tableau avec des valeurs d'entrée différentes pour subdom de $:

$ expr = (! Subdom de $ = 'www') || ($ subdom!= 'nosub');

 
    $subdom  ($subdom!='www')  ($subdom!='nosub')  result 
    ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ 
    www  |  false   |  true   |  true | 
    nosub |  true   |  false  |  true | 
    anything |  true   |  true   |  true | 
    blah! |  true   |  true   |  true | 

Je pense que vous êtes désireux d'utiliser le ET (& &) opérateur ici ...

+0

C'est ce qui finit par fonctionner. En utilisant && et <> – Codex73

1

Ces opérateurs ont la même sémantique, mais un autre precedence:

false && true or true // = (false && true) or true => true 
false and true || true // = false and (true || true) => false 
+0

Pouvez-vous expliquer un peu plus? J'ai lu le lien "priorité" et ils semblent tous les deux avoir la même chose. Si j'utilise && cela fonctionne et j'utilise || ce n'est pas le cas. Je veux essentiellement que la condition soit vraie si l'un des deux fonctionne. && signifie ET qui signifie pour moi deux doivent être rencontrés afin de produire TRUE. – Codex73

+0

Ils ne sont pas identiques; ET a une priorité inférieure à &&. Si l'interpréteur rencontre une condition avec les deux opérateurs, il évalue celui qui a la priorité la plus élevée en premier. Cela n'a pas d'importance si vous n'utilisez qu'un opérateur dans votre condition ou utilisez des parens par comparaison (ce que vous devriez toujours faire de toute façon). – monzee

3

Vous devez réfléchir à travers la logique que vous essayez d'exprimer. En ce moment, votre logique dit "Si le sous-domaine n'est pas 'www' ou le sous-domaine n'est pas 'nosub'". Si l'un de ces deux est vrai, le code sera exécuté.

Essayons certains cas de test sur ce point:

  • nosub: ce n'est pas "www", de sorte que la condition est vraie, exécutez le code
  • aléatoire: ce n'est pas "www" ou "nosub", afin que les deux conditions sont vraies, exécutez le code
  • www: ce n'est pas "nosub", de sorte que la condition est vraie, exécutez le code

Fondamentalement, ce que vous avez fait est fait pour que tout soit vrai. Ce que vous essayez réellement d'exprimer est "Le sous-domaine n'est pas" www "et ce n'est pas" nosub "". Autrement dit, si ce n'est l'un de ceux-ci, vous voulez exécuter le code.

L'instruction if correcte serait: if ($subd != 'nosub' && $subd != 'www').

Si vous avez des problèmes avec cela, il peut être préférable de changer votre processus de venir avec la logique que vous mettez à l'intérieur de l'instruction if. Voici une description de la façon dont vous pourriez le construire.

Commencez par commencer par la condition que vous considérez comme «bonne». La "bonne" condition est "$ subd est l'un de 'www' ou 'nosub'". L'instruction if pour ce serait: if ($subd == 'www' || $subd == 'nosub')

Maintenant, vous essayez d'écrire du code pour gérer la condition n'est pas bonne, donc vous devez prendre le contraire de la bonne condition. Pour prendre le contraire d'une condition booléenne, vous entourez le tout avec un NON. Dans le code: if !($subd == 'www' || $subd == 'nosub')(notez le point d'exclamation devant). Si vous voulez déplacer cette négation à l'intérieur (comme vous aviez essayé de le faire à l'origine), c'est une propriété de l'algèbre booléenne (j'espère que c'est le bon terme, ça fait longtemps que j'ai appris ça) que quand vous déplacez une négation dans une relation comme celle-là, vous annulez les deux opérandes, et vous changez aussi l'opérateur d'un ET à un OU, ou vice versa. Donc dans ce cas, lorsque vous déplacez la négative à l'intérieur des parenthèses, les deux == devenir != et la || devient &&, entraînant: if ($subd != 'www' && $subd != 'nosub), comme je l'avais indiqué ci-dessus.

Modifier à nouveau: Les propriétés que je mentionne dans le dernier paragraphe sont appelées De Morgan's laws.

+0

Merci pour vos commentaires. – Codex73

0

Le cas est incorrect car toutes les chaînes passeront la vérification. Toutes les chaînes ne sont pas 'www' ou pas 'nosub'. C'est pour cette raison que l'utilisation de == est généralement meilleure que! =.

2

Je pense que vous voulez utiliser « et » plutôt que « ou ».

L'utilisation d'un « ou » sur ces deux conditions se traduira toujours vrai que la chaîne sera toujours pas l'une des valeurs.

0

Je devine votre passage de votre sous-domaine quelque chose comme membres, vous devez donc la

suivante
if(($dom == 'www') || ($dom == 'nosub')) 
{ 
    echo 'go away'; 
}