Qual è la differenza (se esiste) tra (null! = $ oggetto) e ($ oggetto! = null) quando si utilizza PHP?

8

Sono abituato a Java e quindi penso sempre che le condizioni siano interpretate da sinistra a destra, cioè c'è una differenza vitale in null != $obj e $obj != null

Ora questo sembra non essere il caso di PHP.

Posso fare qualcosa di sbagliato in PHP quando inizio sempre con null sul lato sinistro? Posso mantenere il mio comportamento da Java o devo allenarmi a fare qualcos'altro quando si tratta di condizioni PHP?

    
posta Wizard Of Tech 21.08.2012 - 14:34
fonte

3 risposte

4
  • Non c'è alcuna differenza (tecnica) - né esiste in Java per quanto ne so.
  • In PHP, non usare nessuno di questi.

Ti consiglio di utilizzare sempre gli operatori rigorosi di confronto === e !== se possibile. Saprai quando hai bisogno di operatori di confronto sparsi

.

Le incomprensioni

Credo che tu possa essere confuso su un paio di cose:

  • operatori di cortocircuito
  • ordine di valutazione
  • precedenza dell'operatore

I just found that the PHP manual says: "PHP checks each condition in order from left to right"

No,

  • il manuale di PHP non dice che è un commento.
  • PHP non fa non .

PHP valuta le condizioni da sinistra a destra, ma si ferma una volta che il risultato è noto:

expr1 && expr2

Se expr1 valuta false , expr2 sarà non essere valutato. Questo è chiamato cortocircuito e questo non sembra essere molto ben- documentato - Non sono riuscito a trovare altre note ufficiali sull'argomento, ad eccezione del commento nell'Esempio n. 1. È comunque una funzione ben conosciuta .

Fallacies

I am used to Java and therefore always think conditions are interpreted from left to right, i.e. there is a vital difference in null != $obj and $obj != null

PHP checks each condition in order from left to right
Ergo: The same "best practice" can be applied

Ergo: niente - non sequitur. La conclusione non segue dalla premessa. L'utilizzo di constant == $variable o $variable == constant non è connesso a nessuno dei cortocircuiti , ordine di valutazione o precedenza dell'operatore .

Comportamento indefinito

Entrambi gli operandi di != sono sempre valutati. Nel caso di PHP, l'ordine di valutazione (che è irrilevante qui) è in realtà non specificato (come in assenza dalla documentazione).

    
risposta data 21.08.2012 - 20:48
fonte
0

Per quanto riguarda il tuo caso particolare, un altro approccio sarebbe quello di usare la funzione php integrata is_null. Così si finirebbe con is_null ($ mixedValue) che farebbe tutto il lavoro per te e correttamente fare il confronto di tipo e tutto il resto.

    
risposta data 24.08.2012 - 23:51
fonte
-1

@ phant0m: OK punto preso ... NON UTILIZZARE MAI! = o == usa sempre! === e === quando scrivi codice con PHP. Quindi questa domanda era sbagliata all'inizio, e non c'è best practice con NULL su entrambi i lati della condizione quando si tratta di PHP.

    
risposta data 21.08.2012 - 16:13
fonte

Leggi altre domande sui tag