Alessio Mavica PHP & MySQL Developer, Project Leader & Scrum Master

14feb/120

E_STRICT – 5 errori comuni

Quando sviluppiamo un'applicazione PHP è molto importante configurare correttamente l'error_reporting per analizzare gli errori messaggi della nostra applicazione. Dalla versione 5 si è incluso un nuovo livello denominato E_STRICT. Secondo la definizione di php.net:

Enabling E_NOTICE during development has some benefits. For debugging purposes: NOTICE messages will warn you about possible bugs in your code. For example, use of unassigned values is warned. It is extremely useful to find typos and to save time for debugging. NOTICE messages will warn you about bad style. For example, $arr[item] is better to be written as $arr['item'] since PHP tries to treat "item" as constant. If it is not a constant, PHP assumes it is a string index for the array.

Con l'inclusione di E_STRICT nel E_ALL in PHP 5.4 no avremo scuse per non guardare questi messaggi.

PERCHÉ UTILIZZARE E_STRICT?

E_STRICT ci permette sviluppare codice più pulito e assicura una maggiore interoperabilità e compatibilità con versioni successive di PHP.

I 5 ERRORI PIÙ COMUNI USANDO E_STRICT

Di recente ho attivato l'E_STRICT in una web per aggiornare il codice e questi sono i 5 errori più frequenti con cui mi sono trovato faccia a faccia:

1. Funzioni obsolete

PHP ci indica se una funziona è deprecata. Ecco qui la lista delle obsolete per la versione 5.3: http://php.net/manual/en/migration53.deprecated.php

Errore:

PHP Deprecated: Function xxx() is deprecated

2. Static

Molte volte dimentichiamo di porre la keyword "static" nella definizione di una funzione che poi utilizziamo con class::method

Errore:

Non-static method XXX should not be called statically, assuming $this from incompatible context

3. Overloading

In PHP non esiste l'overloading, lo possiamo solo "simulare" con __call pero come tutti i metodi magici è abbastanza costoso. In altre parole non possiamo dichiarare due funzioni con lo stesso nome che si differenziano solo per la firma (parametri). Dunque nel caso dell'overriding (sovrascrittura di un metodo di una classe padre che abbiamo ereditato) dobbiamo utilizzare gli stessi parametri o, al massimo, aggiungerne altri.

Errore:

Declaration of XXX should be compatible with that of YYY

4. Passare una variabile a una funzione che accetta un parametro per referenzia

Non è possibile non passare una variabile a una funzione che accetta un parametro per referenzia. Concretamente non possiamo fare questo:

array_pop(explode('-', 'hello-world'));

Dobbiamo salvare il risultato dell'explode in una variabile e successivamente passarla all'array_pop:

$hola = explode('-', 'hello-world');
array_pop($var);

Ecco alcune funzioni che accettano parametri per referenzia: array_shift, array_unshift, array_pop, array_push, current, end...

Errore:

Only variables should be passed by reference

5. Creare un oggetto generico

A volte per passare dati via json o per comodità creiamo un oggetto generico senza inizializzarlo. Per esempio:

$obj->propierty = true;

In questo caso dobbiamo inizializzare l'oggetto in questo modo:

$obj = new stdClass();
$obj->propierty = true;

Errore:

Creating default object from empty value

CONCLUSIONI

L'uso di E_STRICT ci permetterà di sviluppare applicazioni compatibili con il futuro e ci aiuta a apprendere dettagli del PHP che non conoscevamo.

Commenti (0) Trackback (0)

Ancora nessun commento.


Leave a comment

(required)


− tre = 6

Ancora nessun trackback.