2010-04-21 10 views
7

Qual è la differenza tra quelle espressioni PHP !?Qual è la differenza tra quelle espressioni PHP?

if ($var !== false) 
{ 
    // Do something! 
} 


if (false !== $var) 
{ 
    // Do something! 
} 

Alcuni framework come Zend Framework utilizzano il modulo più recente mentre il tradizionale è il primo.

Grazie in anticipo

risposta

10

il risultato dell'espressione è lo stesso tuttavia è un buon modo per proteggersi dall'assegnazione anziché dal confronto (ad esempio scrivendo se ($ var = falso) invece di if ($ var == falso), poiché si può t assegnare il valore $ var alla parola chiave "false")

0

Non c'è alcuna differenza reale. Gli operandi sono solo su lati diversi ma il confronto è lo stesso.

1

Le due espressioni sono semanticamente identiche. È solo una questione di preferenza se mettere l'espressione costante prima o dopo.

0

Non c'è differenza. !== confronta 2 espressioni con controllo tipo e restituisce true se non sono uguali. La differenza potrebbe essere nell'ordine di valutazione delle espressioni, ma nel caso in cui hai scritto, non c'è differenza (e un buon programma non deve basarsi sull'ordine di esecuzione di tali espressioni).

0

Consideriamo questo scenario:

if (strpos($string, $substring)) { /* found it! */ } 

Se $substring si trova alla esatto inizio $string, il valore restituito è 0. Purtroppo, all'interno del caso, questo restituisce false, quindi il condizionale non viene eseguito .

Il modo corretto per gestire che sarà:

if (false !== strpos($string, $substring)) { /* found it! */ } 

Conclusione:

false è sempre garantito di essere falsa. Altri valori potrebbero non garantire questo. Ad esempio, in PHP 3, empty('0') era true, ma successivamente è stato modificato in false.

+0

perché giù voto ????? – Sarfraz

+0

Non ti ho minimizzato, ma non hai risposto alla domanda. L'OP non sta chiedendo la differenza tra 'if ($ var)'/'if (func())' e 'if ($ expectedValue === $ var)'/'if ($ expectedValue === func()), ma solo perché sarebbe una buona idea elencare le costanti prima delle variabili in condizionali dell'istruzione if. – pinkgothic

2

È davvero una preferenza. Si può mettere in entrambi i casi, un b o b == == A, ma è più facile fare un errore se si fa

if ($var == false) 

perché se accidentalmente digita con una lettera =, la condizione sarà sempre uguale true (perché $ var sarà impostato con successo), ma in caso di

if (false == $var) 

se ora mettere in =, si otterrà un errore.

+0

Nitpick: "perché se lo digiti accidentalmente con una = lettera, la condizione sarà sempre uguale a true" - questo non è vero. 'if ($ var = false)' è uguale a '$ var = false; se ($ var) '. Ergo, valuterà sempre di falso. – pinkgothic

Problemi correlati