Maison  >  Questions et réponses  >  le corps du texte

Opérateurs logiques et priorité des opérateurs d’affectation en PHP.

<p>Je l'ai récemment trouvé dans un passage comme celui-ci :</p> <pre class="brush:php;toolbar:false;">$x = 2 && $y = 3; echo (int)$x.':'.(int)$y;</ pré> <p>Cet extrait de code produit une sortie 1:3. En regardant le tableau de priorité des opérateurs, j'ai découvert que les opérateurs logiques || et && ont une priorité plus élevée que l'opérateur d'affectation =. Par conséquent, la première expression doit être traitée comme $x = ($y || 2) = 3 ; ce qui fait $x = (2 && $y) = 3 et est finalement évalué à $x = false = 3 ; . Deuxièmement, l'opérateur d'affectation a un ordre correct, donc l'interprète doit essayer de faire false = 3, ce qui est évidemment illégal. Donc, à mon avis, l'extrait de code mentionné ci-dessus ne devrait pas être compilé et devrait générer une erreur d'analyse ou d'exécution. Mais au lieu de cela, cet extrait a produit un rapport de 1:3. Cela signifie que ce que fait l'interprète est : </p> <blockquote> <p>a) $y=3</p> <p>b) 2 && $y</p> <p>c) $x = (2 && $y)</p> </blockquote> <p>Pourquoi procéder ainsi plutôt que de se baser sur la priorité des opérateurs ?</p>
P粉176980522P粉176980522411 Il y a quelques jours490

répondre à tous(1)je répondrai

  • P粉615829742

    P粉6158297422023-08-08 00:02:37

    Le tableau de priorité des opérateurs que vous avez fourni indique dans un commentaire séparé :

    Ainsi, en effet, une affectation au sein d'une expression sera traitée comme une sous-expression. Comment et quand cela est fait n'est pas clairement indiqué dans la documentation, qui indique simplement que des expressions « similaires » fonctionneront de cette façon.

    répondre
    0
  • Annulerrépondre