Qual è l'impostazione error_reporting() consigliata per lo sviluppo?E che dire di E_STRICT?
-
09-06-2019 - |
Domanda
In genere utilizzo E_ALL
per vedere tutto ciò che PHP potrebbe dire sul mio codice per provare a migliorarlo.
Ho appena notato una costante di errore E_STRICT
, ma non ne hai mai usato o ne hai mai sentito parlare, è una buona impostazione da utilizzare per lo sviluppo?Il manuale dice:
Avvisi in fase di esecuzione.Abilita PHP per suggerire modifiche al tuo codice che garantiranno la migliore interoperabilità e compatibilità futura del tuo codice.
Quindi mi chiedo se sto usando il meglio error_reporting
livello con E_ALL
o sarebbe insieme a quello E_STRICT
Sii il migliore?Oppure c'è qualche altra combinazione che devo ancora imparare?
Soluzione
In PHP 5, le cose trattate da E_STRICT
non sono coperti da E_ALL
, quindi per ottenere il maggior numero di informazioni è necessario combinarli:
error_reporting(E_ALL | E_STRICT);
In PHP 5.4, E_STRICT
sarà incluso in E_ALL
, quindi puoi usare solo E_ALL
.
Puoi anche usare
error_reporting(-1);
che consentirà sempre Tutto errori.Che è semanticamente più corretto in quanto:
error_reporting(~0);
Altri suggerimenti
Utilizzare quanto segue in php.ini:
error_reporting = E_ALL | E_STRICT
Inoltre dovresti installare Xdebug, può evidenziare gli errori nell'accecare i colori brillanti e stampare informazioni dettagliate utili.
Non lasciare mai alcun errore o avviso nel tuo codice, anche se è innocuo.
A mio avviso, più alto è il livello di segnalazione degli errori in fase di sviluppo, meglio è.
In un ambiente live, vuoi un set leggermente (ma solo leggermente) ridotto, ma vuoi che siano registrati da qualche parte in modo che non possano essere visti dall'utente (preferisco syslog
).
http://php.net/error_reporting
E_ALL | E_STRICT
per lo sviluppo con PHP prima della 5.2.0.
5.2 introduce E_RECOVERABLE_ERROR
e 5.3 introduce E_DEPRECATED
E E_USER_DEPRECATED
.Probabilmente vorrai attivarli se stai utilizzando una di quelle versioni.
Se volessi usare i numeri magici potresti semplicemente impostare il file error_reporting
valore ad un valore abbastanza alto di 2^n-1
- Dire, 16777215
, e questo accenderebbe davvero tutti i bit intermedi 1..n
.Ma non credo che usare i numeri magici sia una buona idea...
A mio parere, PHP ha perso un po' la palla avendo E_ALL
non essere davvero tutto.Ma a quanto pare il problema verrà risolto in PHP 6...
Nelle versioni PHP più recenti, E_ALL include più classi di errori.A partire da PHP 5.3, E_ALL include tutto tranne E_STRICT.In PHP 6 includerà presumibilmente anche questo.Questo è un buon suggerimento:è meglio vedere più messaggi di errore piuttosto che meno.
Ciò che è incluso in E_ALL è documentato nel file Costanti predefinite PHP pagina del manuale in linea.
Personalmente, penso che non abbia molta importanza se usi E_STRICT.Certamente non ti farà male, soprattutto perché potrebbe impedirti di scrivere script che hanno una piccola possibilità di rompersi nelle future versioni di PHP.D'altro canto, in alcuni casi i messaggi severi potrebbero risultare troppo rumorosi, soprattutto se si ha fretta.Ti suggerisco di attivarlo per impostazione predefinita e di spegnerlo quando diventa fastidioso.
Puoi usare error_reporting = -1
Sarà sempre composto da tutti i bit (anche se non sono in E_ALL)
A seconda dei piani di supporto a lungo termine per questo codice, è possibile eseguire il debug con E_STRICT
abilitato può aiutare il tuo codice a continuare a funzionare in un lontano futuro, ma probabilmente è eccessivo per l'uso quotidiano.Ci sono due cose importanti a riguardo E_STRICT
da tenere presente:
- Secondo il manuale, maggior parte
E_STRICT
gli errori vengono generati in fase di compilazione, non in fase di esecuzione.Se stai aumentando il livello di errore aE_ALL
all'interno del tuo codice (e non tramite php.ini), potresti non vederlo maiE_STRICT
comunque errori. E_STRICT
è contenuto all'internoE_ALL
sotto PHP 6, ma non sotto PHP 5.Se aggiorni il tuo server a PHP6 e haiE_ALL
configurato come descritto al punto 1 sopra, inizierai a vedereE_STRICT
errori senza richiedere ulteriori modifiche da parte tua.
Non parlando strettamente di error_reporting, lo farei fortemente suggerire di utilizzare qualsiasi IDE che mostri automaticamente errori di analisi e problemi comuni (ad esempio, assegnazione in condizione).
Zend Studio for Eclipse ha questa funzione abilitata per impostazione predefinita e da quando ho iniziato a usarla mi ha aiutato molto a individuare gli errori prima che si verifichino.
Ad esempio, avevo questo pezzo di codice in cui stavo memorizzando nella cache alcuni dati nel file $GLOBALS
variabile, ma ho inavvertitamente scritto $_GLOBALS
Invece.I dati non sono mai stati memorizzati nella cache e non l'avrei mai saputo se Zend non mi avesse detto:"Ehi, questo $_GLOBALS
appare solo una volta, potrebbe essere un errore".
ini_set("visualizzazione_errori","2");ERRORE_REPORTING(E_ALL);