2010-09-04 1 views
5

stavo studiando un certo codice che ho trovato sul web di recente, e sono imbattuto in questa sintassi di PHP:Strano assegnazione variabile

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

Qualcuno può spiegare cosa sta succedendo in questa riga di codice? A quale variabile viene assegnato il/i valore/i, e qual è lo scopo dell'operatore & &, in quella posizione dell'istruzione?

Grazie! Pat

risposta

3

Ah, ho appena scritto un post sul blog su questo idioma in javascript:

http://www.mcphersonindustries.com/

Fondamentalmente si tratta di test per vedere che $framecharset esiste, e quindi cerca di assegnarlo a $frame['charset'] se è non -nullo.

Il modo in cui funziona è che gli interpreti sono pigri. Entrambi i lati di una dichiarazione && devono essere veri per continuare. Quando incontra un valore false seguito da &&, si arresta. Non continua a valutare (quindi in questo caso l'assegnazione non si verifica se $framecharset è false o null).

Alcune persone metteranno anche la metà più "costosa" di un'espressione booleana dopo &&, in modo che se la prima condizione non è true, il bit costoso non verrà mai elaborato. È discutibile quanto questo potrebbe effettivamente risparmiare, ma utilizza lo stesso principio.

+0

tua spiegazione è molto chiara. Grazie. – cube

+0

Alex, quale sarebbe l'esatta sintassi equivalente javascript? – cube

+0

Oh, lo vedo sul tuo blog, grazie. – cube

2

&& in PHP è cortocircuitato, il che significa RHS non saranno valutate se il LHS viene valutata essere false, perché il risultato sarà sempre false.

tuo codice:

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

è equivalente a:

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

che assegna il valore di $framecharset come valore alla matrice chiave charset solo se il valore restituisce essere true e in PHP

Tutte le stringhe sono vere tranne due: una stringa contenente nulla e una stringa contenente solo la carattere 0