PHP, non lo stesso vecchio linguaggio
-
Upload
massimiliano-arione -
Category
Technology
-
view
1.024 -
download
0
description
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