PHP, non lo stesso vecchio linguaggio

28
non lo stesso vecchio linguaggio Massimiliano Arione

description

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

Transcript of PHP, non lo stesso vecchio linguaggio

Page 1: PHP, non lo stesso vecchio linguaggio

non lo stesso vecchio linguaggio

Massimiliano Arione

Page 2: PHP, non lo stesso vecchio linguaggio

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.

Page 3: PHP, non lo stesso vecchio linguaggio

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?

Page 4: PHP, non lo stesso vecchio linguaggio

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

Page 5: PHP, non lo stesso vecchio linguaggio

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)

Page 6: PHP, non lo stesso vecchio linguaggio

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)

Page 7: PHP, non lo stesso vecchio linguaggio

le origini

classi

oggetti

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

Page 8: PHP, non lo stesso vecchio linguaggio

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.

Page 9: PHP, non lo stesso vecchio linguaggio

e gli sviluppatori?

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

Page 10: PHP, non lo stesso vecchio linguaggio

i problemi

quali sono i problemi principali rimasti negli sviluppatori PHP?

Page 11: PHP, non lo stesso vecchio linguaggio

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

Page 12: PHP, non lo stesso vecchio linguaggio

i problemi

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

Page 13: PHP, non lo stesso vecchio linguaggio

lo scopo

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

Page 14: PHP, non lo stesso vecchio linguaggio

lo scopo

1. divertimento

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

Page 15: PHP, non lo stesso vecchio linguaggio

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.

Page 16: PHP, non lo stesso vecchio linguaggio

le soluzioni

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

Page 17: PHP, non lo stesso vecchio linguaggio

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)

Page 18: PHP, non lo stesso vecchio linguaggio

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).

Page 19: PHP, non lo stesso vecchio linguaggio

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.

Page 20: PHP, non lo stesso vecchio linguaggio

l'attuale ecosistema

vediamo cosa offre l'attuale ecosistema di PHP

Page 21: PHP, non lo stesso vecchio linguaggio

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.

Page 22: PHP, non lo stesso vecchio linguaggio

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)

Page 23: PHP, non lo stesso vecchio linguaggio

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

Page 24: PHP, non lo stesso vecchio linguaggio

l'attuale ecosistema

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

Page 25: PHP, non lo stesso vecchio linguaggio

l'attuale ecosistema

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

Page 26: PHP, non lo stesso vecchio linguaggio

ma anche...

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

Page 27: PHP, non lo stesso vecchio linguaggio

domande

?

Page 28: PHP, non lo stesso vecchio linguaggio

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