2010-09-04 11 views
5

estaba estudiando algo de código que encontré en la web hace poco, y me encontré con este php sintaxis:asignación de variables extraño

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

Puede alguien explicar lo que está pasando en esta línea de código? ¿Qué variable (s) se le asignan qué valor (es) y cuál es el propósito del operador & &, en esa ubicación de la declaración?

Gracias! Pat

Respuesta

3

Ah, me acaba de escribir un post sobre este idioma en javascript:

http://www.mcphersonindustries.com/

Básicamente se trata de pruebas para ver que $framecharset existe, y luego trata de asignarlo a $frame['charset'] si es no -nulo.

La forma en que funciona es que los intérpretes son flojos. Ambos lados de una declaración && deben ser verdaderas para continuar. Cuando encuentra un valor false seguido de &&, se detiene. No continúa evaluando (por lo que en este caso la asignación no ocurrirá si $framecharset es false o null).

Algunas personas pondrán incluso la mitad más "cara" de una expresión booleana después del &&, de modo que si la primera condición no es true, entonces el bit caro nunca se procesará. Es discutible cuánto puede ahorrar realmente, pero usa el mismo principio.

+0

Su explicación es muy clara. Gracias. – cube

+0

Alex, ¿cómo sería la sintaxis equivalente exacta de JavaScript? – cube

+0

Oh, lo veo en tu blog, gracias. – cube

2

&& en PHP se cortocircuita, lo que significa la RHS no se evaluará si el LHS evalúa para ser false, ya que el resultado será siempre false.

Su código:

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

es equivalente a:

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

que asigna el valor de $framecharset como el valor de la matriz clave charset sólo si el valor se evalúa como ser true y en PHP

Todas las cadenas son verdaderas excepto dos: una cadena contiene nada en absoluto y una cadena que contiene sólo el carácter

Cuestiones relacionadas