Sta dicendo "if ($ a! = null && $ a == 5)" uguale a "if ($ a == 5)"

5

Prima di tutto, scusa se questa risposta è altrove. Ho fatto una breve ricerca, ma non ero sicuro di come chiedere in termini di ricerca.

Sto guardando un codice e ho trovato molte affermazioni come questa:

if ( ($a != empty_or_null_or_notDefined && $a == 5 )

È come dire semplicemente:

if ( $a == 5 )

(la lingua è PHP.)

    
posta user127379 27.10.2012 - 12:44
fonte

3 risposte

6

A un livello puramente logico, presumendo & è il locale e l'operatore, quindi $a essendo 5 lo preclude dall'essere null .

Detto questo, in alcuni linguaggi e cortocircuiti (cioè, se un operando fallisce, non controlla gli altri, poiché l'intera clausola è nota per fallire quando lo si fa). In questo caso, questa potrebbe essere una mossa per l'efficienza, anche se è altamente improbabile che l'uguaglianza sia un'operazione abbastanza costosa per renderlo utile (specialmente perché PHP non offre un sovraccarico dell'operatore).

Poiché è PHP, una singola e commerciale è un'operazione% bit and , non logica, in quanto tale, non può essere pigro. Il tuo argomento ha una e commerciale, mentre la domanda stessa ne ha due, penso che quest'ultima sia più probabile che sia l'opzione reale (poiché ciò che sta accadendo è un controllo logico), ma dovresti chiarire.

    
risposta data 27.10.2012 - 12:50
fonte
4

Questo codice è necessario per evitare errori. Se si tenta di accedere a un oggetto non definito, si verifica un errore irreversibile.

Controllare se questo oggetto non è indefinito prima di controllare il valore ti permette di aggirare questo errore.

Se il primo controllo non supera (è indefinito?), non controllerà il valore, quindi non genererà un errore.

    
risposta data 27.10.2012 - 13:33
fonte
2

Bella domanda.

Logic A # if ( ($a != empty_or_null_or_notDefined && $a == 5 )

Logic B # if ( $a == 5 )

La logica B è migliore della logica A. (Riguardo alla complessità dell'algoritmo) Se il tuo scopo è solo Logica B, allora non hai bisogno della Logica A.

NULL è critico. Può essere indicato come Non definito, Vuoto, ecc. Meglio evitare il confronto NULL, perché è difficile eseguire il debug.

Appoggio la risposta di @Florian Margaine, assolutamente, ogni codice è necessario per evitare errori. Se si tenta di accedere a un oggetto non definito, si ottiene un errore irreversibile. Controllare se questo oggetto non è indefinito prima di controllare il valore ti permette di aggirare questo errore.

E se il confronto con NULL è necessario per te, allora dai un'occhiata alla seguente risorsa

link

    
risposta data 27.10.2012 - 14:13
fonte

Leggi altre domande sui tag