PHP, non lo stesso vecchio linguaggio

Post on 06-Dec-2014

1.020 views 0 download

description

La mia presentazione sull'evoluzione di PHP al Codemotion 2013 a Roma

Transcript of PHP, non lo stesso vecchio linguaggio

non lo stesso vecchio linguaggio

Massimiliano Arione

about

una breve introduzione su di me: sviluppatore web da oltre un decennio, membro del GrUSP, presidente del PUG Roma, co-autore del libro PHP Best Practices.

PHP...

questa immagine un po’ scherzosa rappresenta la visione che hanno degli sviluppatori PHP gli sviluppatori di altri linguaggi più blasonati. Ovviamente si tratta di uno scherzo, ma ha un fondo di verità: perché gli sviluppatori PHP sono visti un po’ come degli script kiddies?

spaghetti code

il motivo è che, dalla sua nascita e per almeno un lustro, PHP è stato il linguaggio per eccellenza dello spaghetti code. Chiunque riuscisse nella non difficile impresa di installare Apache e Mysql, si trovava a maneggiare esempi presi qua e là e a implementare siti dinamici, senza alcuna organizzazione del codice

spaghetti code

ecco un breve esempio, uno preso a caso dalla rete, di come si possa scrivere cattivo codice in PHP (e di come lo sia stato fatto effettivamente per molto tempo)

le origini

<FORM ACTION="/cgi-bin/php.cgi/~userid/display.html" METHOD=POST><INPUT TYPE="text" name="name"><INPUT TYPE="text" name="age"><INPUT TYPE="submit"></FORM>

<? if($age>50); echo "Hi $name, you are ancient!<p>"; elseif($age>30); echo "Hi $name, you are very old!<p>"; else; echo "Hi $name."; endif;>

in origine, PHP fu creato come un semplice strumento per iniettare valori dinamici nei form. Si chiamava PHP/FI, che stava per Personal Home Page/Form Injector, con un gioco di parole ricavato da TCP/IP. Questo esempio è ricavato direttamente dal manuale della versione 2.0 (parliamo del 1997)

le origini

classi

oggetti

patternquindi niente classi, niente oggetti, niente pattern! "pattern" probabilmente era una parola sconosciuta al 99% degli sviluppatori

ma poi...

fin qui abbiamo visto che il linguaggio effettivamente poneva dei seri limiti alle pratiche della buona programmazione. Ma poi, un bel giorno (parliamo del 2004/2005), è uscito PHP5: e finalmente abbiamo visto un supporto alla OOP sempre maggiore.

e gli sviluppatori?

e gli sviluppatori? Sono rimasti gli stessi di quello spaghetti code visto all'inizio o si sono evoluti insieme al linguaggio?

i problemi

quali sono i problemi principali rimasti negli sviluppatori PHP?

i problemi

N I Hantipattern Not Invented Here. Quante volte ho visto, per esempio sui forum, sviluppatori chiedere aiuto per sviluppare funzionalità come invio di email o autenticazine... Nonostante ci siano sempre state soluzioni pronte e a portata di mano, molti preferiscono risolvere di nuovo problemi che sono stati risolti centinaia di volte

i problemi

antipattern del coltellino svizzero. Implementare una mega-classe che fa un sacco di cose diverse, magari lunga 1000 righe.

lo scopo

facciamo una piccola parentesi: io, come sviluppatore PHP, che cosa voglio?

lo scopo

1. divertimento

Prima di tutto vorrei divertirmi mentre scrivo codice. O perlomeno non annoiarmi.

lo scopo

2. qualità

E poi vorrei scrivere codice di qualità, in modo da soddisfare anche i miei clienti. Perché in fondo con PHP ci devo vivere.

le soluzioni

Come fare quindi per raggiungere i miei scopi, evitando contemporaneamente i problemi a cui abbiamo accennato?

le soluzioni

pattern: non reinventare la ruota. Al contrario di NIH, devo usare delle classi già pronte, che implementano la funzionalità che mi serve (e possibilmente solo quella)

le soluzioni

pattern: don't repeat yourself (DRY). Questo è un po' come il precedente, ma applicato a sé stessi. Se sto duplicando una funzioalità, devo rifattorizzare e spostare in un'altra classe (o simile).

le soluzioni

pattern: SRP (Single Responsiblity Principle). Al contrrario del coltellino svizzero, devo avere tanti singoli strumenti, ciascuno dei quali fa una cosa sola, e la fa bene.

l'attuale ecosistema

vediamo cosa offre l'attuale ecosistema di PHP

l'attuale ecosistema

quasi tutti i progetti importanti, incluso il sorgente di PHP stesso, sono su github. Questo vuol dire estrema facilità nel collaborare e nel contribuire.

l'attuale ecosistema

PHP, da pochissimo, dispone di un eccellente sistema di gestione delle dipendenze, ispirato dal gestore di pacchetti di suse, che disponse di un SAT (soddisfacibilità booleana)

l'attuale ecosistema

collaborazione. Varie realtà si sono unite in uno sforzo comune, dando vita al progetto FIG (Framework Interoperability Group), per assicurare degli standard comuni. Questo vuol dire maggiore facilità nel far interagire librerie di progetti diversi

l'attuale ecosistema

test automatici. Questa è una parte veramente molto importante, per assicurare sia la qualità al cliente che la tranquillità allo sviluppatore.

l'attuale ecosistema

ci sono quindi un sacco di librerie o di progetti interessanti oggi, scritti in PHP

ma anche...

ma, attenzione, ce ne sono ancora altri che sono rimasti indietro

domande

?

creditshttp://www.mulaz.org/spam/wp-content/uploads/2009/12/pG3q7.jpghttp://sourcemaking.com/files/sm/images/spagett.jpghttp://inliniac.files.wordpress.com/2009/01/20090115-msc-sguil-code.pnghttp://www.php.net/manual/phpfi2.php#startinghttp://static.blogo.it/ossblog/go_php5.pnghttp://images.wikia.com/nonciclopedia/images/archive/8/80/20110124225729!Swiss-army-knife.jpghttp://cdn.androidpolice.com/wp-content/uploads/2013/02/nexusae0_image59.pnghttp://www.planetgeek.ch/wp-content/uploads/2010/06/image1.pnghttp://brandhabits.files.wordpress.com/2010/06/reinventing-the-wheel.jpghttp://mordor.digitaldarkness.com/phing/images/dont_repeat.jpghttp://www.jaspermorrison.com/images/projects/tableware_kfs.jpghttp://blog.indeed.it/wp-content/uploads/2012/05/graph-atd-full1.pnghttp://attosoft.info/images/mascot/elephpant.pnghttp://octodex.github.com/images/socialite.jpghttp://getcomposer.org/img/logo-composer-transparent.pnghttp://blog.twelvecode.com/wp-content/uploads/2012/06/php_fig-620x300.pnghttp://2.bp.blogspot.com/-sB1-dhxwx5c/T5MonNLbzVI/AAAAAAAAAKo/KG-cL8ZxO6k/s1600/PHPUnit-logo.jpghttp://symfony.com/logohttp://framework.zend.com/participate/logoshttp://buby.it/var/ezflow_site/storage/images/media/images/ez-publish-logo/611-1-ita-IT/eZ-Publish-Logo.pnghttps://github.com/laravelhttp://symfony.com/uploads/assets/doctrine/logo.pnghttp://www.seoperseo.it/wp-content/uploads/2010/09/joomlapng.pnghttp://wordpress.org/about/logos/http://upload.wikimedia.org/wikipedia/commons/6/63/Wikipedia-logo.png