2011-10-05 61 views
6

Sto cercando di migliorare le mie capacità di codifica ninja h4x, e attualmente sto esaminando diversi framework e ho trovato codice di esempio che è piuttosto difficile da google.Valutazione cortocircuito tramite l'operatore AND in PHP

Sto guardando il FUEL framework utilizzato in un progetto.

Il campione che non capisco è

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

Qual è il e parola chiave facendo in questa riga di codice? È usato in molti posti nel framework ed è il primo che ho trovato a usarlo.

risposta

12

Questo è un tipo di "short circuit evaluation". Il and/&& implica che entrambi i lati del confronto devono essere valutati su TRUE.

L'articolo a sinistra dello and/&& viene valutato su TRUE/FALSE e se TRUE, l'elemento a destra viene eseguito e valutato. Se l'articolo a sinistra è FALSE, l'esecuzione si ferma e il lato destro non viene valutato.

$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 questi non devono essere effettive booleano TRUE/FALSE, ma può anche essere valori truthy/falsy in base alle regole di valutazione di PHP. Vedi lo PHP boolean docs per maggiori informazioni sulle regole di valutazione.

+0

risposta perfetta <3 –

+0

+1. sebbene FUEL debba davvero usare '&&' per quello. –

2

Si tratta di una dichiarazione valida e funziona così:

Se $ dati sono validi (non è '', 0 o NULL) quindi eseguire $ this-> template-> set_global ($ dati)

si tratta di un modo rapido per dire:

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

Btw si può anche utilizzare && invece di and

+0

Sbagliato, se usi '||', valuterà il lato destro solo se il lato sinistro non è vero. – igorw

+0

È && non || Non rimuoverò i punti per questo: P –

+0

Giusto. Tempo per me di andare a letto penso>. < – Tom

-2

È un boolean operator che significa che accetta due operandi e restituisce un valore booleano - true o false. Se entrambi gli operandi vengono valutati su true (qualsiasi cosa tranne stringa vuota, zero o null in PHP) restituirà true, altrimenti il ​​risultato sarà false.

Ecco documentazione ufficiale di PHP sulla and dell'operatore: 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

hai frainteso la domanda –

4

Quando si utilizzano operatori logici, operandi (il valore a sinistra e il valore a destra) sono valutati come booleana, in modo sostanzialmente che il codice farà questo, in una via più breve:

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

Edit:

Alcune informazioni aggiuntive:

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

Provare a commentare/decomment $a = 33;.Questa è la differenza tra && e AND e tra || e OR (print restituisce true che viene convertito in "1" quando convertito in stringa).

0

PHP supporta sia && e and per l'operazione logica AND, e generalmente funzionano identicamente, tranne and ha una precedenza operatore leggermente inferiore &&: http://php.net/manual/en/language.operators.precedence.php

+0

hai frainteso la domanda –

+0

Anche se non affronta direttamente la domanda, +1 per menzionare le differenze di precedenza. –

Problemi correlati