In PHP, si dovrebbero usare operatori di confronto triplo uguale (===) invece di doppio uguale (==) a meno che non ci sia una ragione particolare per utilizzare questultimo?


Migliore risposta

Assolutamente!

In PHP, Javascript o qualsiasi altro linguaggio che offra controlli di equivalenza sia ampi che rigorosi, è meglio usare la versione rigorosa a meno che tu non abbia una ragione convincente per fare altrimenti . (In effetti, alcuni sviluppatori di software insistono sul fatto che tu non usi affatto controlli di uguaglianza sciolti!) Ci sono una serie di ragioni per questo.

Prima di tutto, usare lequivalenza sciolta può portare a unintera classe di difetti che può essere evitato con stretta equivalenza. Sebbene PHP sia particolarmente noto per essere “utile”, la maggior parte delle lingue con digitazione dinamica è indulgente quando si tratta di convertire i tipi. I dati che superano lequivalenza libera potrebbero comportarsi bene in molti casi e andare molto più in profondità nel codice prima di attivare un errore o causare un effetto collaterale imprevisto. I severi controlli di equivalenza, nel frattempo, sono più simili ai tipi di controlli che si verificano nei linguaggi tipizzati staticamente; è molto meno probabile che i dati in un formato errato siano impazziti.

Un problema correlato è come lequivalenza libera renda il codice più difficile da ragionare. Se utilizzi lequivalenza rigorosa, puoi formulare molte ipotesi sui dati che superano il controllo. Lo stesso non è vero se usi lequivalenza sciolta. Considera i due esempi seguenti.

// Example #1: strict

if ( $i === 1 ) {

doThing( $i );

}

// Example #2: loose

if ( $i == 1 ) {

doThing( $i );

}

Nel primo esempio, possiamo supporre che la funzione “doThing” venga chiamata con un valore numerico e dobbiamo solo considerare come quella funzione gestirà i numeri.

Nel secondo esempio, tuttavia, “doThing” potrebbe essere chiamato con una varietà di tipi tra cui stringhe o valori booleani. Durante la lettura della funzione “fare qualcosa”, è necessario considerare come potrebbe essere gestito ciascun tipo, comprese tutte le varie (e talvolta prive di senso) regole riguardanti le conversioni di tipo implicite. È molto di cui tenere traccia nella tua testa!

Inoltre, utilizzando lequivalenza sciolta, non sei esplicito. Ciò non solo contribuisce alla difficoltà di ragionare attraverso la logica, ma non riesce nemmeno a cogliere i requisiti effettivi che la logica dovrebbe rappresentare. Con lesempio n. 2 visto sopra, non cè modo di sapere se il programmatore originale si aspettava valori numerici, valori stringa, valori booleani o una loro combinazione. Rende il codice un mal di testa da mantenere.

Infine, mentre il casting del tipo implicito può essere conveniente, non ce nè bisogno in un ambiente professionale. È sempre possibile impostare valori predefiniti ragionevoli o forzare manualmente i dati nel tipo appropriato. Ciò potrebbe richiedere più codice e più impegno, ma aumenta anche notevolmente laffidabilità del codice.

Risposta

Se sai che due valori dovrebbero avere lo stesso tipo, sì, usa Strict ( ===) troppo sciolto (==). Strict ha prestazioni migliori perché non deve eseguire la conversione del tipo come fa sciolto.

Ad esempio 1 == “1” restituisce true perché quella stringa viene convertita in un numero per verificare luguaglianza

Mentre 1 === “1” restituisce false

Luguaglianza rigorosa praticamente “non è lo stesso tipo? FALSE “

Spero che questo aiuti

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *