2010-12-10 6 views
48

Comment utiliser 'AND/OR' dans une instruction if if else? Serait-il:Utilisation de AND/OR if if else Instruction PHP

1) ET

if ($status = 'clear' AND $pRent == 0) { 
    mysql_query("UPDATE rent 
        SET dNo = '$id', 
         status = 'clear', 
         colour = '#3C0' 
        WHERE rent.id = $id"); 
} 

2) OU

if ($status = 'clear' OR $pRent == 0) { 
    mysql_query("UPDATE rent 
        SET dNo = '$id', 
         status = 'clear', 
         colour = '#3C0' 
        WHERE rent.id = $id"); 
} 

Répondre

79

Oui. La réponse est oui.
http://www.php.net/manual/en/language.operators.logical.php


Deux choses cependant:

  • De nombreux programmeurs préfèrent && et || au lieu de and et or, mais ils fonctionnent de la même (sans danger pour priorité).
  • $status = 'clear' devrait probablement être $status == 'clear'. = est l'affectation, == est la comparaison.
+85

Et juste pour fins de complétions, '===' est pour la comparaison de type + valeur. Dans le futur, PHP inclura également '====' pour vérifier que les classes ont été écrites par le même programmeur, '=====' pour s'assurer qu'elles ont été écrites le même jour, et '===== = 'S'assurer que le programmeur portait un pantalon à ce moment-là. – AgentConundrum

+14

@Agent J'ajouterais '=============' pour m'assurer que la spécification du projet n'a pas changé depuis que le code a été écrit. – deceze

+6

@deceze - Bon, mais seulement s'il retourne toujours 'FALSE' – AgentConundrum

5

ET est && et OR est || comme dans C.

7

Vous avez 2 questions ici.

  1. utiliser == pour comparaison. Vous avez utilisé = pour l'affectation.

  2. utilisation && pour "et" et || pour "ou". and et or fonctionnera mais ils ne sont pas conventionnels.

+0

Il est rare, mais ils voulaient peut-être attribuer à cette condition: P Bien que je parie ils n'ont pas. – alex

+1

@alex: Certainement pas dans le cas de 'if ($ status = 'clear' OU $ pRent == 0) {'. Dans ce cas, la deuxième condition est inaccessible. Ça doit être une erreur. – Asaph

+0

Oui, certainement pas avec le 'OU'. – alex

1

pour et que vous utilisez

if ($status = 'clear' && $pRent == 0) { 
    mysql_query("UPDATE rent SET dNo = '$id', status = 'clear', colour = '#3C0' WHERE rent.id = $id"); 
} 

pour OU vous utilisez

if ($status = 'clear' || $pRent == 0) { 
    mysql_query("UPDATE rent SET dNo = '$id', status = 'clear', colour = '#3C0' WHERE rent.id = $id"); 
} 
+0

Son code est équivalent à votre code – cleanunicorn

0

je pense que je vais avoir un peu de confusion. :) Mais personne ne semble avoir ..

Demandez-vous lequel utiliser dans ce scénario? Si oui, alors Et est la bonne réponse.

Si vous demandez comment les opérateurs travaillent, puis

en php à la fois ET, & & et OU, || fonctionnera de la même manière.Si vous êtes nouveau dans la programmation et PHP est l'une de vos premières langues, je suggère d'utiliser ET et OU, car il augmente la lisibilité et réduit la confusion lorsque vous revenez en arrière. Mais si vous êtes déjà familier avec d'autres langues, vous avez peut-être déjà familiarisé avec le & & et || les opérateurs.

+0

Ceci est tout simplement incorrect. ET/OU ont une priorité inférieure à l'affectation alors que &&/|| avoir une priorité plus élevée. L'exemple classique: '$ e = false || true; 'vs' $ e = faux ou vrai; '. Le premier évalue à vrai, le second à faux. – redreinard

8

Un peu en retard mais pas d'importance ...
la question est "Comment utilisez-vous ...?" réponse courte est que vous le faites correct


L'autre question serait "Quand l'utilisez-vous?"
J'utilise && au lieu de AND et || au lieu de OR.

$a = 1 
$b = 3 

Maintenant,

if ($a == 1 && $b == 1) { TRUE } else { FALSE } 

dans ce cas, le résultat est "FAUX" parce que B n'est pas 1, maintenant si

if ($a == 1 || $b == 1) { TRUE } else { FALSE } 

Cela retournera "TRUE" même si B toujours pas la valeur que nous demandons, il y a une autre façon de retourner TRUE sans l'utilisation de OR/|| et ce serait XOR

if ($a == 1 xor $b == 1) { TRUE } else { FALSE } 

dans ce cas, nous avons besoin que l'un de nos variables pour être vrai mais pas les deux si les deux sont le résultat TRUE serait faux.

J'espère que cette aide ...

plus:
http://www.php.net/manual/en/language.operators.logical.php

-1

"ET" ne fonctionne pas dans mon code PHP.

La version du serveur peut-être?

"& &" fonctionne correctement.

+0

ET n'est pas un mot clé php, la syntaxe est '&&' pour AND. –

+0

@ php_coder_3809625 pour votre aimable référence http://php.net/manual/fr/reserved.keywords.php –

7

Il y a quelques blagues, et des commentaires trompeurs, même des informations partiellement incorrectes dans les réponses ici. Je voudrais essayer de les améliorer:

Première, comme certains l'ont souligné, vous avez un bug dans votre code qui se rapporte à la question:

if ($status = 'clear' AND $pRent == 0) 

devrait être (noter la == au lieu de = dans la première partie):

if ($status == 'clear' AND $pRent == 0) 

qui dans ce cas est fonctionnellement équivalent à

if ($status == 'clear' && $pRent == 0) 

Deuxième, notez que ces opérateurs (and or && ||) sont des opérateurs de court-circuit. Cela signifie que si la réponse peut être déterminée avec certitude à partir de la première expression, la seconde n'est jamais évaluée.Encore une fois cela n'a pas d'importance pour votre ligne ci-dessus débogué, mais il est extrêmement important lorsque vous combinez ces opérateurs avec des missions, parce que

Troisième, la vraie différence entre and or et && || est leur operator precedence. Plus précisément, l'importance est que && || ont une priorité plus élevée que les opérateurs d'affectation (= += -= *= **= /= .= %= &= |= ^= <<= >>=) tandis que and or ont une précocité inférieure à celle des opérateurs d'affectation. Ainsi, dans une déclaration qui combine l'utilisation de l'affectation et de l'évaluation logique, il importe quelle vous choisissez.

exemples modifiés de PHP's page on logical operators:

$e = false || true; 

évaluera à true et attribuer cette valeur à $e, parce que || a priorité de l'opérateur supérieur à =, et donc il évalue essentiellement comme ceci:

$e = (false || true); 

cependant

$e = false or true; 

attribuera false-$e (puis effectuer l'opération or et évaluer true) parce que = a priorité de l'opérateur supérieur à or, évaluer essentiellement comme ceci:

($e = false) or true; 

Le fait que cette ambiguïté existe même fait beaucoup des programmeurs utilisent toujours && || et tout fonctionne comme dans un langage comme C, ie. opérations logiques en premier, puis affectation.

Certaines langues comme Perl utilisent ce type de construction souvent dans un format similaire à ceci:

$connection = database_connect($parameters) or die("Unable to connect to DB."); 

Cela pourrait affecter théoriquement la connexion de base de données $connection, ou si cela a échoué (et nous supposons ici la fonction retournerait quelque chose qui évalue à false dans ce cas), il terminera le script avec un message d'erreur. En raison du court-circuit, si la connexion à la base de données réussit, le die() n'est jamais évalué.

Certaines langues qui permettent cette construction tout droit interdisent les affectations dans les instructions conditionnelles/logiques (comme Python) pour supprimer l'ambiguïté dans l'autre sens.

PHP est allé avec permettre les deux, de sorte que vous avez juste besoin de connaître vos deux options une fois et puis coder comme vous le souhaitez, mais j'espère que vous serez cohérent d'une manière ou d'une autre. En cas de doute, ajoutez simplement un jeu de parenthèses supplémentaire, ce qui supprime toute ambiguïté. Ceux-ci seront toujours les mêmes:

$e = (false || true); 
$e = (false or true); 

Armé de toutes ces connaissances, je préfère utiliser and or parce que je sens qu'il rend le code plus lisible. J'ai juste une règle de ne pas combiner des affectations avec des évaluations logiques. Mais à ce stade, c'est juste une préférence, et la cohérence importe beaucoup plus ici que de quel côté vous choisissez.

0
<?php 
$val1 = rand(1,4); 
$val2=rand(1,4); 

if ($pars[$last0] == "reviews" && $pars[$last] > 0) { 
    echo widget("Bootstrap Theme - Member Profile - Read Review",'',$w[website_id],$w); 
} else { ?> 
    <div class="w100"> 
     <div style="background:transparent!important;" class="w100 well" id="postreview"> 
      <?php 
      $_GET[user_id] = $user[user_id]; 
      $_GET[member_id] = $_COOKIE[userid]; 
      $_GET[subaction] = "savereview"; 
      $_GET[ip] = $_SERVER[REMOTE_ADDR]; 
      $_GET[httpr] = $_ENV[requesturl]; 
      echo form("member_review","",$w[website_id],$w);?> 
     </div></div> 

ive a remplacé le « autre » par « & & » si les deux sont placés ... argh