2010-09-04 2 views
5

j'étudiais un code que je trouve sur le web récemment, et suis tombé sur cette syntaxe php:affectation d'une variable étrange

<?php $framecharset && $frame['charset'] = $framecharset; ?> 

Quelqu'un peut-il expliquer ce qui se passe dans cette ligne de code? Quelle (s) variable (s) sont assignées quelle (s) valeur (s), et à quoi sert l'opérateur & &, à cet emplacement de l'instruction?

Merci! Pat

Répondre

3

Ah, je viens d'écrire un blog sur cet idiome en javascript:

http://www.mcphersonindustries.com/

Fondamentalement, il teste de voir que $framecharset existe, et tente ensuite de l'assigner à $frame['charset'] si elle est non -nul.

La façon dont cela fonctionne est que les interprètes sont paresseux. Les deux côtés d'une instruction && doivent être vrais pour continuer. Lorsqu'il rencontre une valeur false suivie par &&, il s'arrête. Il ne poursuit pas l'évaluation (dans ce cas, l'affectation n'aura pas lieu si $framecharset est false ou null).

Certaines personnes vont même mettre la moitié la plus "chère" d'une expression booléenne après le &&, de sorte que si la première condition n'est pas true, alors le bit cher ne sera jamais traité. On peut soutenir que cela peut effectivement sauver, mais il utilise le même principe.

+0

Votre explication est très claire. Je vous remercie. – cube

+0

Alex, à quoi ressemblerait la syntaxe équivalente de javascript? – cube

+0

Oh, je le vois sur votre blog, merci. – cube

2

&& dans PHP est court-circuitée, ce qui signifie que le RHS ne sera pas évalué si le LHS évalue à être false, parce que le résultat sera toujours false.

Votre code:

$framecharset && $frame['charset'] = $framecharset; 

équivaut à:

if($framecharset) { 
    $frame['charset'] = $framecharset; 
} 

qui affecte la valeur de $framecharset comme valeur au tableau clé charset que si la valeur est évaluée à être true et en PHP

Toutes les chaînes sont vraies sauf deux: une chaîne contenant rien du tout et une chaîne ne contenant que le caractère 0

Questions connexes