web-dev-qa-db-fra.com

PHP "ou" Syntaxe

J'ai beaucoup vu cela: $fp = fopen($filepath, "w") or die(); Mais je n'arrive pas à trouver de vraie documentation sur cette syntaxe "ou". C'est assez évident ce qu'il fait, mais puis-je l'utiliser n'importe où? Et doit-il être suivi de die()? Y a-t-il des mises en garde à utiliser or quand vous pourriez utiliser quelque chose comme

if (file_exists($filepath))
   $fp = fopen($filepath,"r");
else
   myErrMessage();

Je sais que cela semble être une question stupide, mais je ne trouve pas de règles strictes pour cela. Merci.

35
Andrew

C'est un opérateur logique et peut être utilisé dans n'importe quelle expression logique.

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

15
Smamatti

Disons simplement que:

$result = first() || second();

évaluera:

if (first()) {
    $result = true;
} elseif (second()) {
    $result = true;
} else {
    $result = false;
} 

tandis que:

$result = first() or second();

évaluera:

if ($result = first()) {
    // nothing
} else {
    second();
}

En d'autres termes, vous pouvez envisager:

$result = first() || second();

$result = (first() || second());

et:

$result = first() or second();

être:

($result = first()) || second();

C'est juste une question de priorité.

12
tacone

C'est une astuce intéressante, héritée de certains prédécesseurs PHP, basés sur le fait que PHP n'évaluera pas intelligemment une expression après OR, si la première est retournée) vrai:

function a($ret){
    echo "FOO";
    return $ret;
}
function b($ret){
    echo "BAR";
    return $ret;
}

$result = (a(true) OR b(true));

affichera uniquement FOO, ce qui signifie b() n'a même pas été exécuté.

6

or fait juste une comparaison booléenne .

Ce qui est retourné par fopen() peut être traité comme une telle valeur booléenne, car il retourne FALSE s'il échoue (et une valeur différente si ce n'est pas le cas).

S'il échoue, l'instruction est évaluée à droite et la fonction die() est donc appelée.

5
Chris

Fondamentalement, cela signifie "si la première commande échoue, exécutez la deuxième commande". Dans votre exemple, si PHP ne peut pas ouvrir le fichier, il terminera le script (die()).

3
SenorAmor

'Ou' dans PHP est comme la syntaxe de type C (||)

<?php 
if( ($a==1 || $a==2) && ($b==3 || $b==4) && ($c==5 || $c==6) ) { 
     //do that something here. 
} 
?>

Le `` Ou '' dont vous parlez n'est qu'un truc comme l'indique le texte suivant:

Exemple:

$result = mysql_query('SELECT foo FROM bar', $db) or die('Query failed: ' . mysql_error($db));

L'astuce or die () est un très mauvais choix pour plusieurs raisons:

  1. Ce n'est pas une manière très agréable de présenter à l'utilisateur un message d'erreur.
  2. Vous ne pouvez attraper l'erreur en aucune façon.
  3. Vous ne pouvez pas enregistrer l'erreur.
  4. Vous ne pouvez pas contrôler si elle doit être sortie à l'écran ou non. C'est correct de le faire dans un environnement de développement, mais certainement pas dans un environnement de production.

    5. Il vous empêche de faire toute sorte de nettoyage. Il termine simplement le script brusquement.

Référence: [entrez la description du lien ici] [1]

[1]: http://www.phpfreaks.com/blog/or-die-must-dieenter code here

3

Il peut être utilisé comme vous le feriez || comme un OR http://php.net/manual/en/language.operators.logical.php

1
Exupery

Il peut être utilisé comme || mais n'a pas la même priorité: http://www.php.net/manual/en/language.operators.precedence.php

La priorité d'un opérateur spécifie comment "étroitement" il lie deux expressions ensemble. Par exemple, dans l'expression 1 + 5 * 3, la réponse est 16 et non 18 car l'opérateur de multiplication ("*") a une priorité plus élevée que l'opérateur d'addition ("+"). Des parenthèses peuvent être utilisées pour forcer la priorité, si nécessaire. Par exemple: (1 + 5) * 3 correspond à 18.

0