Il PHP che non ti aspetti

Eh già, se usi PHP non ti annoi mai, soprattutto quando escono fuori certi comportamenti simpatici. Avviso che per questo articolo uso la versione (ormai obsoleta) di PHP 5.3.3, che malauguratamente è ancora molto usata in ambienti di produzione (E’ ritenuta stabile, certo…)

W il dinamismo!

Evidentemente chi ha progettato il PHP non aveva bene in mente cosa significa creare un linguaggio a tipizzazione dinamica (o debole), per i non adetti ai lavori, la tipizzazione dinamica permette di cambiare il tipo di una variabile durante l’esecuzione del codice, e quindi i controlli sul tipo vengono fatti a run-time.

Come potete vedere nel codice incriminato, prima definisco una stringa, poi successivamente la ridefinisco come dizionario chiave-valore contenente stringhe. In un linguaggio a tipizzazione dinamica mi aspetto che il tipo della variabile cambi, oppure restituisca errore nel caso la sintassi necessiti di una inizializzazione durante il cambio tipo.

In PHP no! Perchè scomodarsi? Vediamo quindi cosa stampano i due echo:

Dati corrotti! Evviva!

Come potete ben immaginare, anche se un linguaggio è dotato di tipizzazione dinamica, sconsiglio caldamente di fare una cosa del genere. Ma se malauguratamente dovesse capitare, vorrei un comportamento pulito e ben definito…

Explode

La funzione explode è presente nelle principali librerie di molti linguaggi. E’ una funzione che semplicemente prende un carattere e una stringa e divide la stringa in un array di stringhe usando il carattere separato come delimitatore.

Nel codice proviamo a fare una cosa particolare, chiediamo di dividere la stringa usando una virgola come delimitatore, ma passandogli una stringa vuota (che cattivoni che siamo!). Ovviamente mi aspetto un array vuoto, ma evidentemente non ho ancora compreso appieno la follia di chi ha scritto questo linguaggio:

Evviva! Un array contenenente una stringa vuota!

Il parser delle meraviglie

Cosa cambia nelle due linee scritte sopra? Solo degli spazi che separano l’operatore di concatenazione (il punto) dagli operandi. Bene, nel secondo caso otterrete un brutto errore di sintassi: evidentemente il parser crede che “c”.2 sia un numero con la virgola…

Una logica ferrea

Ereditando molto dal C, il valore booleano “false” corrisponde a 0, e “true” a tutto il resto… vediamo l’output…

Ok… i primi 2 tornano… ma il terzo? 0 è uguale a ‘x’? Con un semplice ragionamento logico PHP ci ha appena dimostrato che TRUE è uguale a FALSE… evviva!

Andrea Bontempi

Andrea Bontempi ha scritto 10 articoli

Navigazione articoli


Lascia un commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

Puoi usare questi tag e attributi HTML:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">