PHP: Un progetto open source cresciuto insieme al web
1. Un progetto open source
cresciuto insieme al web
Asmir Mustafic - Linux Day 2011
Pordenone
2. Asmir Mustafic
◦ PHP: 8+ anni
◦ Lavoro @
◦ PUG Friuli
◦ http://linkedin.com/in/goetas
Asmir Mustafic - Linux Day 2011
Pordenone
3. Su le mani!
Asmir Mustafic - Linux Day 2011
Pordenone
4. Linguaggio di scripting (1995)
◦ Interpretato
Orientato al web
Open source (PHP License [non GPL])
Popolare, scalabile, facile, ecc.
Asmir Mustafic - Linux Day 2011
Pordenone
5. Quanto è cambiato il nostro mondo
negli ultimi 10 anni, con l’avvento
del era di internet?
Asmir Mustafic - Linux Day 2011
Pordenone
6. Wordpress
PHP
10M di download
61M di blog attivi
http://wordpress.com
Asmir Mustafic - Linux Day 2011
Pordenone
7. MediaWiki
PHP
Opensource
Multidatabase
Usato da Wikipedia
http://www.mediawiki.org
Asmir Mustafic - Linux Day 2011
Pordenone
8. Search engine & more
PHP
Migrato da C/C++ a PHP nel 2002
3.4 G pageview/day
Uno dei leader del web attuale
Asmir Mustafic - Linux Day 2011
Pordenone
9. Social network
PHP (hiphop)
800M di utenti
10K server
http://facebook.com
Asmir Mustafic - Linux Day 2011
Pordenone
10. Ricerca campione su 10M domini
◦ 59% usa PHP
40 dei 100 siti più vistati al mondo usa PHP
6° posto dei linguaggi più popolari in
assoluto (TIOBE Index Settembre 2011)
Asmir Mustafic - Linux Day 2011
Pordenone
11. Perché dovrei scegliere PHP per il
mio prossimo progetto?
Cosa ha di buono?
Asmir Mustafic - Linux Day 2011
Pordenone
12. Open source
Deployment
Community
rapido
Veloce &
Documentato
Scalabile
Estensibile Facile
Completo &
Maturo
Asmir Mustafic - Linux Day 2011
Pordenone
13. “Si usa Java o .NET per fare i siti seri!”
Asmir Mustafic - Linux Day 2011
Pordenone
14. Uso Storia
1994
Enterprise ◦ Esperimenti per
appassionati
1998
◦ Siti personali
Small
2002
◦ Semplici siti e mini portali
Home ◦ Blog e CMS
2008
◦ Grandi siti
◦ Istituzioni
◦ Multinazionali
Asmir Mustafic - Linux Day 2011
Pordenone
15. Si possono produrre pessime
applicazioni anche con ottimi linguaggi.
Asmir Mustafic - Linux Day 2011
Pordenone
17. Pensare molto bene, prima di iniziare a
scrivere codice
Asmir Mustafic - Linux Day 2011
Pordenone
18. Troverete la soluzione migliore
Risolvere un problema in fase di progettazione
costa davvero poco
In fase di progettazione
In fase di sviluppo
In produzione
Ore di lavro
Asmir Mustafic - Linux Day 2011
Pordenone
20. Problematiche già risolte
◦ Da molto tempo (soluzioni mature)
◦ Nel migliore dei modi
◦ Da molte persone (anche da esperti del problema)
Risparmi tempo e fatica
Ma se siete davvero sicuri di voi stessi, allora
si può provare...
Asmir Mustafic - Linux Day 2011
Pordenone
22. Non avrete tempo
Non avrete voglia
Vorrete provare (bene o male che
vada, imparerete qualcosa!)
Dovrete migliorare la ruota
Se non si cambia, non si migliora, si perde in
partenza!
Asmir Mustafic - Linux Day 2011
Pordenone
23. Le “regole” sono tante altre…
#tu, #cliente, #capo, #team,
#specifiche, ecc.
Asmir Mustafic - Linux Day 2011
Pordenone
24. Alcune “best practice” per
semplificare la vita...
Asmir Mustafic - Linux Day 2011
Pordenone
25. Aderite agli standard
◦ Aumenti la qualità Faciliti la collaborazione
Richiedere gli standard
Standard
Soluzioni Filesystem
Formattazione Consistenza Strumenti
(architetturali) (nomenclatura)
Regola #2
Non reinventare la ruota
Asmir Mustafic - Linux Day 2011
Pordenone
26. Commenti sul codice
◦ phpDocumentor
◦ PEAR UML (consigliato)
Schemi e Diagrammi
◦ UML, ER, Wireframe, Workflow...
Usate un wiki aziendale o DocBook...
Usate un sistema di controllo versione
Regola #1
Pensare molto bene prima di iniziare a scrivere codice
Asmir Mustafic - Linux Day 2011
Pordenone
27. Centralizzato (SVN) Distribuito (GIT)
Server centrale Più repository
Si lavora su copie locali “principali”
Migliore controllo Si inviano le modifiche
accessi ai propri “peer”
Si sfuma il concetto di
copia locale
Asmir Mustafic - Linux Day 2011
Pordenone
28. Controller
Dividete in entità ben distinte:
◦ Dati (Model)
◦ Visualizzazione (View)
◦ Elaborazione (Controller) Model View
Ogni classe/file/funzione assolve ad un solo
compito (Single Responsibility Principle)!
La maggior parte delle moderne applicazioni
ereditano qualche principio da MVC.
Asmir Mustafic - Linux Day 2011
Pordenone
30. DATI
<?php
$res = mysql_query("SELECT * FROM utenti");
?> LOGICA
<select name='utente'>
<?php
while($data = mysql_fetch_array($res)){
echo "<option
value='".$data["id"]."' " .($sel==$data["id"]?'selected':'').">";
echo htmspecialchars($data["nome"],ENT_QUOTES,'UTF-8');
echo "</option>";
}
echo "</select>"; PRESENTAZIONE
SICUREZZA
Asmir Mustafic - Linux Day 2011
Pordenone
31. <?php
$res = mysql_query("SELECT * FROM utenti");
?>
<select name='utente'>
<?php
while($data = mysql_fetch_array($res)){
echo "<option
value='".$data["id"]."' " .($sel==$data["id"]?'selected':'').">";
echo htmspecialchars($data["nome"],ENT_QUOTES,'UTF-8');
echo "</option>";
}
echo "</select>";
Basta con codice “groviglio”!
Applicate i principi dell’MVC!
Asmir Mustafic - Linux Day 2011
Pordenone
32. Controller
<?php
$utenti = getElencoUtenti();
display("utenti.template", array("utenti"=>$utenti, "sel"=>$selected));
Model
<?php
function getElencoUtenti(){
$res = mysql_query("SELECT * FROM utenti");
return mysql_fetch_all($res) ;
}
View
<select name='name'>
<? foreach($utenti as $ut): ?>
<option <?= selectedIf($ut['id']==$sel)?>><?= escape($ut['nome']) ?>
</option>
<? endforeach ?>
</select>
Asmir Mustafic - Linux Day 2011
Pordenone
33. Controller
<?php Dati prelevati dal Model
$utenti = getElencoUtenti();
display("utenti.template", array("utenti"=>$utenti, "sel"=>$selected));
Model
<?php
function getElencoUtenti(){
$res = mysql_query("SELECT * FROM utenti");
return mysql_fetch_all($res) ;
}
View
<select name='name'>
<? foreach($utenti as $ut): ?>
<option <?= selectedIf($ut['id']==$sel)?>><?= escape($ut['nome']) ?>
</option>
<? endforeach ?>
</select>
Asmir Mustafic - Linux Day 2011
Pordenone
34. Controller
<?php
$utenti = getElencoUtenti();
Dati visualizzati tramite la Vista
display("utenti.template", array("utenti"=>$utenti, "sel"=>$selected));
Model
<?php
function getElencoUtenti(){
$res = mysql_query("SELECT * FROM utenti");
return mysql_fetch_all($res) ;
}
View
<select name='name'>
<? foreach($utenti as $ut): ?>
<option <?= selectedIf($ut['id']==$sel)?>><?= escape($ut['nome']) ?>
</option>
<? endforeach ?>
</select>
Asmir Mustafic - Linux Day 2011
Pordenone
35. Database driver ORM
PHP PDO Doctrine 2
Doctrine DBAL Propel
Creole dORM
ADODB
$user = new User();
$user->setName('name');
$orm->persist($user); // save
$user = $orm->findByName('name');
$orm->remove($user); // delete
Regola #2
Non reinventare la ruota
Model per MVC
Asmir Mustafic - Linux Day 2011
Pordenone
36. Classico XML Attribute Template
Twig ATal
Smarty PHPTAL
Dwoo Open Power Template
{if count($utenti)} <ul t:if="count($utenti)">
<ul> <li t:foreach="$utenti as $ut">
{foreach from=$utenti item=ut} {$ut->name}
<li> </li>
{$ut->name|escape} </ul>
</li>
{/foreach}
</ul>
{/if}
View per MVC
Asmir Mustafic - Linux Day 2011
Pordenone
37. Probabilmente
◦ Penserete meglio a ciò che fate (Regola #1)
◦ Non reinventerete la ruota (Regola #2)
◦ Sarete aperti al cambiamento (Regola #3)
◦ Applicherete MVC
Probabilmente
◦ Il risultato sarà più standard
◦ Userete un Template Engine
◦ Userete un ORM
◦ Sfrutterete gli strumenti offerti (se fanno al caso vostro)
◦ L’applicazione sarà più sicura
◦ ecc.
Otterrete migliori risultati con meno sforzo!
Asmir Mustafic - Linux Day 2011
Pordenone
38. Non esiste il framework migliore
Non esiste il framework peggiore
Esiste il framework più adatto!
Scegliete il vostro
◦ Orizzontale? Verticale?
◦ PHP4? 5? 5.3+?
◦ ecc. Zend Framework, Symfony, Kohana, eZ
Components, Yii,, CakePHP, Lithium,
Code Igniter e troppi altri!
Asmir Mustafic - Linux Day 2011
Pordenone
39. Scrivete i test
◦ Applicate modifiche senza il terrore di “rompere”
l’applicazione
◦ PHPUnit (standard de facto)
Pensate sempre alla sicurezza
Tenete sotto controllo le prestazioni
Usate un IDE “serio”
◦ Eclipse, Zend Studio, Aptana, NetBeans, Komodo
Usate un debugger
◦ Xdebug, Zend Debugger
Provate
◦ Phing, Jenkins, Redmine
Asmir Mustafic - Linux Day 2011
Pordenone
40. Uno dei modi migliori per mantenersi
aggiornati e al passo con i tempi è
partecipare al mondo open source.
Asmir Mustafic - Linux Day 2011
Pordenone
41. Domande?
Asmir Mustafic - Linux Day 2011
Pordenone