2011-10-05 14 views
6

estoy tratando de mejorar mis habilidades de ninja H4X de codificación, y actualmente estoy buscando en diferentes marcos, y he encontrado código de ejemplo que es bastante difícil de google.evaluación de cortocircuito por medio del operador AND en PHP

Estoy buscando en el FUEL framework utilizado en un proyecto.

La muestra que no entiendo es

$data and $this->template->set_global($data); 

Cuál es el y palabra clave haciendo en esta línea de código? Se usa en muchos lugares del marco y es el primero que he encontrado que lo usa.

Respuesta

12

Este es un tipo de "short circuit evaluation". El and/&& implica que ambos lados de la comparación deben evaluar a TRUE.

El elemento de la izquierda de la and/&& se evalúa a TRUE/FALSE y si TRUE, el elemento de la derecha es ejecutado y evaluado. Si el elemento de la izquierda es FALSE, la ejecución se detiene y el lado derecho no se evalúa.

$data = FALSE; 
// $this->template->set_global($data) doesn't get evaluated! 
$data and $this->template->set_global($data); 

$data = TRUE; 
// $this->template->set_global($data) gets evaluated 
$data and $this->template->set_global($data); 

Nota éstas no tienen que ser real booleano TRUE/FALSE, pero también puede ser valores Truthy/Falsy segun la normativa de evaluación de PHP. Consulte el PHP boolean docs para obtener más información sobre las reglas de evaluación.

+0

respuesta perfecta <3 –

+0

1. aunque COMBUSTIBLE realmente debería usar '&&' para eso. –

2

Es una declaración válida y funciona así:

Si los datos son válidos $ (no se '', 0 o NULL) a continuación, ejecute $ this-> plantilla-> SET_GLOBAL ($ datos)

Es una forma rápida de decir:

if ($data) 
{ 
    $this->template->set_global($data); 
} 

Por cierto que también se puede utilizar en lugar de &&and

+0

Incorrecto, si usa '||', evaluará el lado derecho solo si el lado izquierdo no es verdadero. – igorw

+0

Es && no || No quitaré los puntos por eso: P –

+0

Muy bien. Es hora de que me vaya a la cama. Creo que>. < – Tom

-2

Es un boolean operator lo que significa que se necesita dos operandos y devuelve un valor booleano value-- true o false. Si ambos operandos se evalúan a true (cualquier cosa menos y cadena vacía, cero o nula en PHP) se volverá true, de lo contrario el resultado será false.

Aquí hay documentación oficial de PHP en el and operador: http://www.php.net/manual/en/language.operators.logical.php

<?php 
$a = true and false; # FALSE 
$b = true and 5; # TRUE 
$c = '' and 0; # FALSE 
$d = null and true; # FALSE 
?> 
+0

has entendido mal la pregunta –

4

Al utilizar operadores lógicos, operandos (el valor de la izquierda y el valor de la derecha) son evaluados como booleano, por lo que, básicamente, que el código hagan esto, de una manera más corto:

$o1 = (Bool)$data; // cast to bool 
if($o1) 
    $o2 = (Bool)$this->template->set_global($data); // cast to bool 

Editar:

Alguna información adicional:

$a = 33; 
isset($a) && print($a) || print("not set"); 
echo "<br>"; 
isset($a) AND print($a) OR print("not set"); 
echo "<br>"; 

Intentar para comentar/descomponer $a = 33;.Esta es la diferencia entre && y AND, y entre || y OR (print devuelve true que se convierte en "1" cuando se convierte en cadena).

0

PHP soporta tanto && y and para la operación lógica AND, y generalmente funciona de forma idéntica, excepto and tiene una precedencia de operadores ligeramente inferior a &&: http://php.net/manual/en/language.operators.precedence.php

+0

has entendido mal la pregunta –

+0

Aunque no aborda directamente la pregunta, +1 por mencionar las diferencias de precedencia. –

Cuestiones relacionadas