Comment utilisez-vous 'AND/OR' dans une instruction if else PHP? Serait-ce:
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");
}
Oui. La réponse est oui.
http://www.php.net/manual/en/language.operators.logical.php
Deux choses cependant:
&&
et ||
à la place de and
et or
, mais ils fonctionnent de la même manière (sauf pour la priorité).$status = 'clear'
devrait probablement être $status == 'clear'
. =
est une assignation, ==
est une comparaison.Il y a des plaisanteries et des commentaires trompeurs, voire des informations partiellement incorrectes dans les réponses fournies ici. J'aimerais essayer de les améliorer:
Tout d'abord , comme certains l'ont souligné, votre code contient un bogue lié à la question suivante:
if ($status = 'clear' AND $pRent == 0)
devrait être (notez le ==
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)
Second , 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 de débogage ci-dessus, mais c'est extrêmement important lorsque vous combinez ces opérateurs avec des affectations, car
Troisièmement , la différence réelle entre and or
et && ||
est leur priorité des opérateurs . Plus précisément, il est important que && ||
ait une priorité supérieure à celle des opérateurs d'assignation (= += -= *= **= /= .= %= &= |= ^= <<= >>=
), tandis que and or
a une priorité 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, le choix de votre choix compte.
Exemples modifiés de page de PHP sur les opérateurs logiques :
$e = false || true;
va évaluer true
et attribuer cette valeur à $e
, car ||
a une priorité supérieure à celle de =
, et est donc essentiellement évalué comme suit:
$e = (false || true);
pourtant
$e = false or true;
assignera false
à $e
(puis effectuera l'opération or
et évaluera true
) car =
a une priorité supérieure à celle de or
, essentiellement évaluer comme ceci:
($e = false) or true;
Le fait que cette ambiguïté existe même fait que beaucoup de programmeurs utilisent toujours toujours && ||
et ensuite tout fonctionne clairement comme on pourrait s'y attendre dans un langage comme C, c'est-à-dire. opérations logiques d'abord, puis affectation.
Certaines langues comme Perl utilisent ce type de construction fréquemment dans un format similaire à celui-ci:
$connection = database_connect($parameters) or die("Unable to connect to DB.");
Ceci assignerait théoriquement la connexion de base de données à $connection
, ou si cela échouait (et nous supposons ici que la fonction renverrait quelque chose qui vaut false
dans ce cas), le script se terminera par un Message d'erreur. En raison d'un court-circuit, si la connexion à la base de données aboutit, la die()
n'est jamais évaluée.
Certaines langues qui autorisent directement cette construction interdisent les affectations dans des instructions conditionnelles/logiques (comme Python) afin de supprimer l’ambiguïté dans l’inverse.
PHP a permis d'autoriser les deux, vous devez donc vous familiariser une seule fois avec les deux options, 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 une parenthèse supplémentaire, qui supprime toute ambiguïté. Ce 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 j'estime que cela rend le code plus lisible. J'ai juste une règle pour ne pas combiner des tâches avec des évaluations logiques. Mais à ce stade, il ne s'agit que d'une préférence, et la cohérence compte beaucoup plus ici que le camp choisi.
Vous avez 2 problèmes ici.
utilisez ==
pour la comparaison. Vous avez utilisé =
qui est destiné à l’affectation.
utilisez &&
pour "et" et ||
pour "ou". and
et or
fonctionneront, mais ils ne sont pas conventionnels.
AND est &&
et OR est ||
comme en C.
AND
et OR
ne sont que des sucres syntaxiques pour &&
et ||
, comme en JavaScript, ou dans d'autres langages à syntaxe C.
Il apparaît AND
et OR
ont une priorité inférieure que leurs équivalents de style C.
pour ET vous utilisez
if ($status = 'clear' && $pRent == 0) {
mysql_query("UPDATE rent SET dNo = '$id', status = 'clear', colour = '#3C0' WHERE rent.id = $id");
}
pour OR vous utilisez
if ($status = 'clear' || $pRent == 0) {
mysql_query("UPDATE rent SET dNo = '$id', status = 'clear', colour = '#3C0' WHERE rent.id = $id");
}
je pense avoir un peu de confusion ici. :) Mais semble personne d'autre ont ..
Voulez-vous savoir lequel utiliser dans ce scénario? Si oui, alors et quelle est la bonne réponse.
Si vous demandez comment fonctionnent les opérateurs, alors
En php, AND, && et OR, fonctionneront de la même manière. Si vous êtes nouveau dans la programmation et que php est l'une de vos langues premières, je suggère d'utiliser AND et OR, car cela augmente la lisibilité et réduit la confusion lorsque vous vérifiez. Mais si vous connaissez déjà d’autres langues, vous avez peut-être déjà familiarisé les && et || les opérateurs.
<?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 'else' par '&&' afin que les deux soient placés ... argh