SlideShare a Scribd company logo
pugBO #10 PSR
e Composer
Davide Bellettini

http://twitter.com/SbiellONE
http://it.linkedin.com/in/davidebellettini/
http://www.davidebellettini.com/
Standard PSR: perché
● Gli sviluppatori dei framework PHP
  sentivano l'esigenza di uniformità tra gli
  standard
● Nasce il Framework Interop Group
● Diversi livelli di standardizzazione
   ○ PSR-0, PSR-1, PSR-2, PSR-3
● Ogni livello include le regole del livello
  inferiore, tranne PSR-3
● Strumenti automatici di verifica (PHP-CS-
  Fixer)
Gli standard 1/3
Le regole standardizzano:
● PSR-0: il nome dei file deve rispecchiare
  quello delle classi VendorHelloCiao diventa
  Vendor/Hello/Ciao.php
● PSR-1
  ○ Tag di apertura e di chiusura: <?php, ?>, <?=$a?>
  ○ Un file può contenere o dichiarazioni o side-effects,
    non entrambi
  ○ La codifica dei file UTF-8 (no BOM)
  ○ Nomi delle classi, costanti e metodi
Gli standard 2/3
● PSR-2
  ○ Una riga di codice dovrebbe essere meno di 80
    colonne, se più di 120 viene dato un warning
  ○ L'indentazione: 4 spazi, no tab, quando indentare
  ○ A capo con Line Feed
  ○ Quando mandare a capo le graffe, a capo nelle
    definizioni di classi e metodi ecc
  ○ Spaziatura nella lista argomenti, a capo, ecc
  ○ Niente spazi a fine riga
  ○ niente ?> nei file contenenti solo PHP
  ○ true, false, null sempre in minuscolo
  ○ vietato usare var
  ○ ordine delle parole public, final, abstract, static
Gli standard 3/3
● PSR-3 (standardizzazione dei logger)
  ○ PsrLogLoggerInterface
    ■ definisce i classici metodi del logger: (debug,
       info, notice, warning, error, critical, alert,
       emergency).
  ○ LoggerAwareInterface: setLogger
  ○ LogLevel: costanti per i vari livelli di log
Composer: a cosa serve?
Composer è un sistema open source di
gestione delle dipendenze per PHP che
gestisce:
● l'installazione e l'aggiornamento le librerie
  PHP pubblicate sul sito packagist.org
● il caricamento delle classi secondo lo
  standard PSR-0
● i vincoli sul numero di versione e stabilità
Il perché del successo
● Descrittore facile da scrivere
● Rapidamente adottato da progetti importanti
  del mondo PHP
● Evita la noia dei git submodules / svn
  externals
● Gestisce le dipendenze transitive e i conflitti
● Grazie allo standard PSR-0 viene fornito di
  autoloader
● Più semplice da usare rispetto a PEAR
Alcuni progetti
● Drupal 8
● Tutti i prodotti Sensio (Symfony 2.1, Twig,
  Silex, ...)
● Doctrine
● Smarty
● UniversiBO
● Zend Framework
● ...
● Sempre in aumento!
I file in gioco
● composer.phar: l'archivio contenente il
  codice PHP dell'applicazione composer
● composer.json: il descrittore dove inserire
  le informazioni del progetto (nome,
  sviluppatori, dipendenze, ecc)
● composer.lock: file gestito da composer
  che tiene traccia delle versioni delle librerie
  installate, è consigliabile metterlo sotto
  controllo di versione
● vendor/autoload.php: class loader
Esempio di file composer
"require": {
     "php": ">=5.3.3",
     "symfony/symfony": "2.1.*",
     "doctrine/orm": ">=2.2.3,<2.4-dev",
     "doctrine/doctrine-bundle": "1.0.*",
     "twig/extensions": "1.0.*",
     ...
}
Ma la libreria XYZ...
...non è su packagist.org!

Nessun problema! È sufficiente conoscere l'url
dell'archivio zip da scaricare.

http://getcomposer.org/doc/04-schema.
md#repositories
Ma la libreria XYZ...
... è su un repository PEAR

Nessun problema! Composer installa anche da
PEAR

http://getcomposer.org/doc/04-schema.
md#repositories
Non voglio pubblicare...
... le mie librerie, non voglio che siano Open
Source!

No problem! Packagist è software libero (MIT)
e puoi installarne una copia, oppure generare
un repository con Satis!
In pratica
Scaricamento del phar
curl -s https://getcomposer.org/installer |
php
Creazione di un nuovo composer.json passo
passo: php composer.phar init
Aggiornamento delle dipendenze
php composer.phar update

Installazione a partire da composer.lock
php composer.phar install
Alcuni esempi concreti
Alcuni composer.json di progetti reali.
https://github.
com/UniversiBO/UniversiBO/blob/master/comp
oser.json
https://github.
com/FriendsOfSymfony/FOSUserBundle/blob/
master/composer.json
https://github.com/symfony/symfony-
standard/blob/2.1/composer.json
Birra
●   Tennent's
●   La Frasca
●   Master Beer 0 °C ?

More Related Content

What's hot

php day 2008 - Introduzione agli ez components
php day 2008 - Introduzione agli ez componentsphp day 2008 - Introduzione agli ez components
php day 2008 - Introduzione agli ez components
Gaetano Giunta
 
Linux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compattaLinux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compatta
Alessandro Selli
 
Espressioni regolari da 0 a esperti
Espressioni regolari da 0 a espertiEspressioni regolari da 0 a esperti
Espressioni regolari da 0 a esperti
Mariano Fiorentino
 
Corso Bash
Corso BashCorso Bash
Corso Bash
Franco Tampieri
 
A short introduction about traffic shaping and K-Shaper tool --- speech at Ha...
A short introduction about traffic shaping and K-Shaper tool --- speech at Ha...A short introduction about traffic shaping and K-Shaper tool --- speech at Ha...
A short introduction about traffic shaping and K-Shaper tool --- speech at Ha...
Massimiliano Leone
 
Seminario introduzione all'uso del terminale e della bash in Linux
Seminario introduzione all'uso del terminale e della bash in LinuxSeminario introduzione all'uso del terminale e della bash in Linux
Seminario introduzione all'uso del terminale e della bash in Linux
alberto fiaschi
 
Richiami su Linux - Webmin - Reti di calcolatori
Richiami su Linux - Webmin - Reti di calcolatoriRichiami su Linux - Webmin - Reti di calcolatori
Richiami su Linux - Webmin - Reti di calcolatori
Fulvio Corno
 
Resocontolinuxlite
ResocontolinuxliteResocontolinuxlite
Resocontolinuxlite
Francesco Guglielmino
 
TYPO3 e la partenza intelligente. Familiarizzare con l'ambiente e lo strument...
TYPO3 e la partenza intelligente. Familiarizzare con l'ambiente e lo strument...TYPO3 e la partenza intelligente. Familiarizzare con l'ambiente e lo strument...
TYPO3 e la partenza intelligente. Familiarizzare con l'ambiente e lo strument...
gammsystem
 
T3Camp Italia 2014 - TypoScript: personalizzare la configurazione di css_styl...
T3Camp Italia 2014 - TypoScript: personalizzare la configurazione di css_styl...T3Camp Italia 2014 - TypoScript: personalizzare la configurazione di css_styl...
T3Camp Italia 2014 - TypoScript: personalizzare la configurazione di css_styl...
Roberto Torresani
 
Linux Day Torino 2015 applicazioni per iniziare
Linux Day Torino 2015   applicazioni per iniziareLinux Day Torino 2015   applicazioni per iniziare
Linux Day Torino 2015 applicazioni per iniziare
Francesco Tucci
 
Linux Kernel, driver e compilazione
Linux Kernel, driver e compilazioneLinux Kernel, driver e compilazione
Linux Kernel, driver e compilazione
Fulvio Corno
 
LTSP
LTSPLTSP

What's hot (13)

php day 2008 - Introduzione agli ez components
php day 2008 - Introduzione agli ez componentsphp day 2008 - Introduzione agli ez components
php day 2008 - Introduzione agli ez components
 
Linux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compattaLinux Capabilities - ita - v2.1.5 - compatta
Linux Capabilities - ita - v2.1.5 - compatta
 
Espressioni regolari da 0 a esperti
Espressioni regolari da 0 a espertiEspressioni regolari da 0 a esperti
Espressioni regolari da 0 a esperti
 
Corso Bash
Corso BashCorso Bash
Corso Bash
 
A short introduction about traffic shaping and K-Shaper tool --- speech at Ha...
A short introduction about traffic shaping and K-Shaper tool --- speech at Ha...A short introduction about traffic shaping and K-Shaper tool --- speech at Ha...
A short introduction about traffic shaping and K-Shaper tool --- speech at Ha...
 
Seminario introduzione all'uso del terminale e della bash in Linux
Seminario introduzione all'uso del terminale e della bash in LinuxSeminario introduzione all'uso del terminale e della bash in Linux
Seminario introduzione all'uso del terminale e della bash in Linux
 
Richiami su Linux - Webmin - Reti di calcolatori
Richiami su Linux - Webmin - Reti di calcolatoriRichiami su Linux - Webmin - Reti di calcolatori
Richiami su Linux - Webmin - Reti di calcolatori
 
Resocontolinuxlite
ResocontolinuxliteResocontolinuxlite
Resocontolinuxlite
 
TYPO3 e la partenza intelligente. Familiarizzare con l'ambiente e lo strument...
TYPO3 e la partenza intelligente. Familiarizzare con l'ambiente e lo strument...TYPO3 e la partenza intelligente. Familiarizzare con l'ambiente e lo strument...
TYPO3 e la partenza intelligente. Familiarizzare con l'ambiente e lo strument...
 
T3Camp Italia 2014 - TypoScript: personalizzare la configurazione di css_styl...
T3Camp Italia 2014 - TypoScript: personalizzare la configurazione di css_styl...T3Camp Italia 2014 - TypoScript: personalizzare la configurazione di css_styl...
T3Camp Italia 2014 - TypoScript: personalizzare la configurazione di css_styl...
 
Linux Day Torino 2015 applicazioni per iniziare
Linux Day Torino 2015   applicazioni per iniziareLinux Day Torino 2015   applicazioni per iniziare
Linux Day Torino 2015 applicazioni per iniziare
 
Linux Kernel, driver e compilazione
Linux Kernel, driver e compilazioneLinux Kernel, driver e compilazione
Linux Kernel, driver e compilazione
 
LTSP
LTSPLTSP
LTSP
 

Viewers also liked

Metering Central America &amp; Mexico 2011
Metering Central America &amp; Mexico 2011Metering Central America &amp; Mexico 2011
Metering Central America &amp; Mexico 2011
adrianorehder
 
17263.002 Smart Grid
17263.002 Smart Grid17263.002 Smart Grid
17263.002 Smart Grid
adrianorehder
 
Meterig Central America &amp; Mexico 2011
Meterig Central America &amp; Mexico 2011Meterig Central America &amp; Mexico 2011
Meterig Central America &amp; Mexico 2011
adrianorehder
 
Metering Central America &amp; Mexico
Metering Central America &amp; MexicoMetering Central America &amp; Mexico
Metering Central America &amp; Mexico
adrianorehder
 
Deepwater Brazil Congress 2010
Deepwater Brazil Congress 2010Deepwater Brazil Congress 2010
Deepwater Brazil Congress 2010adrianorehder
 
Presentación lanzamiento del estudio: "Análisis de la demanda energética de B...
Presentación lanzamiento del estudio: "Análisis de la demanda energética de B...Presentación lanzamiento del estudio: "Análisis de la demanda energética de B...
Presentación lanzamiento del estudio: "Análisis de la demanda energética de B...Empresa de Energía de Bogotá
 
Smart Grid Brazil Forum
Smart Grid Brazil ForumSmart Grid Brazil Forum
Smart Grid Brazil Forum
adrianorehder
 
Smart Grid
Smart GridSmart Grid
Smart Grid
adrianorehder
 

Viewers also liked (8)

Metering Central America &amp; Mexico 2011
Metering Central America &amp; Mexico 2011Metering Central America &amp; Mexico 2011
Metering Central America &amp; Mexico 2011
 
17263.002 Smart Grid
17263.002 Smart Grid17263.002 Smart Grid
17263.002 Smart Grid
 
Meterig Central America &amp; Mexico 2011
Meterig Central America &amp; Mexico 2011Meterig Central America &amp; Mexico 2011
Meterig Central America &amp; Mexico 2011
 
Metering Central America &amp; Mexico
Metering Central America &amp; MexicoMetering Central America &amp; Mexico
Metering Central America &amp; Mexico
 
Deepwater Brazil Congress 2010
Deepwater Brazil Congress 2010Deepwater Brazil Congress 2010
Deepwater Brazil Congress 2010
 
Presentación lanzamiento del estudio: "Análisis de la demanda energética de B...
Presentación lanzamiento del estudio: "Análisis de la demanda energética de B...Presentación lanzamiento del estudio: "Análisis de la demanda energética de B...
Presentación lanzamiento del estudio: "Análisis de la demanda energética de B...
 
Smart Grid Brazil Forum
Smart Grid Brazil ForumSmart Grid Brazil Forum
Smart Grid Brazil Forum
 
Smart Grid
Smart GridSmart Grid
Smart Grid
 

Similar to pugBO #10 PSR e Composer

GNU Linux Programming introduction
GNU Linux Programming introductionGNU Linux Programming introduction
GNU Linux Programming introduction
Vincenzo Paolo Fraddosio
 
SVN/TRAC
SVN/TRACSVN/TRAC
SVN/TRAC
Diego La Monica
 
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linuxTrace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linuxDeveler S.r.l.
 
Continuous Integration e High Quality Code
Continuous Integration e High Quality CodeContinuous Integration e High Quality Code
Continuous Integration e High Quality Code
Daniele Mondello
 
Battaglia Navale
Battaglia NavaleBattaglia Navale
Battaglia Navale
PaoloVanacore
 
Linux@Unina
Linux@UninaLinux@Unina
Linux@Unina
NaLUG
 
Link. php [santi caltabiano]
  Link. php [santi caltabiano]  Link. php [santi caltabiano]
Link. php [santi caltabiano]
santi caltabiano
 
Closure Visto Da Vicino
Closure Visto Da VicinoClosure Visto Da Vicino
Closure Visto Da Vicino
davide ficano
 
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
Daniele Falamesca
 
Introduzione al web (2/2) - 18/19
Introduzione al web (2/2) - 18/19Introduzione al web (2/2) - 18/19
Introduzione al web (2/2) - 18/19
Giuseppe Vizzari
 
PIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel LinuxPIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel LinuxMarco Ferrigno
 
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
Marco Chiesi
 
5 - Introduzione al Web (2/2)
5 - Introduzione al Web (2/2)5 - Introduzione al Web (2/2)
5 - Introduzione al Web (2/2)
Giuseppe Vizzari
 
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPNetbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPGiorgio Cefaro
 
Profilazione di applicazioni PHP con XHProf.
Profilazione di applicazioni PHP con XHProf.Profilazione di applicazioni PHP con XHProf.
Profilazione di applicazioni PHP con XHProf.
Filippo Matteo Riggio
 
Continous Delivery & HQ Code
Continous Delivery & HQ CodeContinous Delivery & HQ Code
Continous Delivery & HQ Code
Daniele Mondello
 
Motori di ricerca per cercare file in Linux
Motori di ricerca per cercare file in LinuxMotori di ricerca per cercare file in Linux
Motori di ricerca per cercare file in Linux
Roberto Marmo
 
5 - Introduzione al Web (2/2) - 17/18
5 - Introduzione al Web (2/2) - 17/185 - Introduzione al Web (2/2) - 17/18
5 - Introduzione al Web (2/2) - 17/18
Giuseppe Vizzari
 

Similar to pugBO #10 PSR e Composer (20)

Logging
LoggingLogging
Logging
 
GNU Linux Programming introduction
GNU Linux Programming introductionGNU Linux Programming introduction
GNU Linux Programming introduction
 
SVN/TRAC
SVN/TRACSVN/TRAC
SVN/TRAC
 
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linuxTrace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux
Trace32 lo-strumento-piu-completo-per-il-debug-di-un-sistema-linux
 
Continuous Integration e High Quality Code
Continuous Integration e High Quality CodeContinuous Integration e High Quality Code
Continuous Integration e High Quality Code
 
Battaglia Navale
Battaglia NavaleBattaglia Navale
Battaglia Navale
 
Linux@Unina
Linux@UninaLinux@Unina
Linux@Unina
 
Link. php [santi caltabiano]
  Link. php [santi caltabiano]  Link. php [santi caltabiano]
Link. php [santi caltabiano]
 
Closure Visto Da Vicino
Closure Visto Da VicinoClosure Visto Da Vicino
Closure Visto Da Vicino
 
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
Corso di Basi e Fondamenti di Programmazione in C++ Lezione 1
 
Introduzione al web (2/2) - 18/19
Introduzione al web (2/2) - 18/19Introduzione al web (2/2) - 18/19
Introduzione al web (2/2) - 18/19
 
DHow2 - L5
DHow2 - L5DHow2 - L5
DHow2 - L5
 
PIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel LinuxPIT2012: Workshop@UniNA - Compilazione del Kernel Linux
PIT2012: Workshop@UniNA - Compilazione del Kernel Linux
 
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
Sviluppare un plugin WordPress da zero - WordCamp Bologna 2018
 
5 - Introduzione al Web (2/2)
5 - Introduzione al Web (2/2)5 - Introduzione al Web (2/2)
5 - Introduzione al Web (2/2)
 
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPNetbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
 
Profilazione di applicazioni PHP con XHProf.
Profilazione di applicazioni PHP con XHProf.Profilazione di applicazioni PHP con XHProf.
Profilazione di applicazioni PHP con XHProf.
 
Continous Delivery & HQ Code
Continous Delivery & HQ CodeContinous Delivery & HQ Code
Continous Delivery & HQ Code
 
Motori di ricerca per cercare file in Linux
Motori di ricerca per cercare file in LinuxMotori di ricerca per cercare file in Linux
Motori di ricerca per cercare file in Linux
 
5 - Introduzione al Web (2/2) - 17/18
5 - Introduzione al Web (2/2) - 17/185 - Introduzione al Web (2/2) - 17/18
5 - Introduzione al Web (2/2) - 17/18
 

More from Davide Bellettini

CQRS and Event Sourcing with MongoDB and PHP
CQRS and Event Sourcing with MongoDB and PHPCQRS and Event Sourcing with MongoDB and PHP
CQRS and Event Sourcing with MongoDB and PHP
Davide Bellettini
 
Presentazione UniversiBO
Presentazione UniversiBOPresentazione UniversiBO
Presentazione UniversiBO
Davide Bellettini
 
Presentazione UniversiBO (Ingegneria Informatica)
Presentazione UniversiBO (Ingegneria Informatica)Presentazione UniversiBO (Ingegneria Informatica)
Presentazione UniversiBO (Ingegneria Informatica)Davide Bellettini
 
Riunione aperta UniversiBO 08/05/2012
Riunione aperta UniversiBO 08/05/2012Riunione aperta UniversiBO 08/05/2012
Riunione aperta UniversiBO 08/05/2012
Davide Bellettini
 
Framework di supporto allo sviluppo di applicazioni Web
Framework di supporto allo sviluppo di applicazioni WebFramework di supporto allo sviluppo di applicazioni Web
Framework di supporto allo sviluppo di applicazioni Web
Davide Bellettini
 

More from Davide Bellettini (6)

CQRS and Event Sourcing with MongoDB and PHP
CQRS and Event Sourcing with MongoDB and PHPCQRS and Event Sourcing with MongoDB and PHP
CQRS and Event Sourcing with MongoDB and PHP
 
Presentazione UniversiBO
Presentazione UniversiBOPresentazione UniversiBO
Presentazione UniversiBO
 
Presentazione UniversiBO (Ingegneria Informatica)
Presentazione UniversiBO (Ingegneria Informatica)Presentazione UniversiBO (Ingegneria Informatica)
Presentazione UniversiBO (Ingegneria Informatica)
 
Riunione aperta UniversiBO 08/05/2012
Riunione aperta UniversiBO 08/05/2012Riunione aperta UniversiBO 08/05/2012
Riunione aperta UniversiBO 08/05/2012
 
MyJOrganizer presentazione
MyJOrganizer presentazioneMyJOrganizer presentazione
MyJOrganizer presentazione
 
Framework di supporto allo sviluppo di applicazioni Web
Framework di supporto allo sviluppo di applicazioni WebFramework di supporto allo sviluppo di applicazioni Web
Framework di supporto allo sviluppo di applicazioni Web
 

pugBO #10 PSR e Composer

  • 1. pugBO #10 PSR e Composer Davide Bellettini http://twitter.com/SbiellONE http://it.linkedin.com/in/davidebellettini/ http://www.davidebellettini.com/
  • 2. Standard PSR: perché ● Gli sviluppatori dei framework PHP sentivano l'esigenza di uniformità tra gli standard ● Nasce il Framework Interop Group ● Diversi livelli di standardizzazione ○ PSR-0, PSR-1, PSR-2, PSR-3 ● Ogni livello include le regole del livello inferiore, tranne PSR-3 ● Strumenti automatici di verifica (PHP-CS- Fixer)
  • 3. Gli standard 1/3 Le regole standardizzano: ● PSR-0: il nome dei file deve rispecchiare quello delle classi VendorHelloCiao diventa Vendor/Hello/Ciao.php ● PSR-1 ○ Tag di apertura e di chiusura: <?php, ?>, <?=$a?> ○ Un file può contenere o dichiarazioni o side-effects, non entrambi ○ La codifica dei file UTF-8 (no BOM) ○ Nomi delle classi, costanti e metodi
  • 4. Gli standard 2/3 ● PSR-2 ○ Una riga di codice dovrebbe essere meno di 80 colonne, se più di 120 viene dato un warning ○ L'indentazione: 4 spazi, no tab, quando indentare ○ A capo con Line Feed ○ Quando mandare a capo le graffe, a capo nelle definizioni di classi e metodi ecc ○ Spaziatura nella lista argomenti, a capo, ecc ○ Niente spazi a fine riga ○ niente ?> nei file contenenti solo PHP ○ true, false, null sempre in minuscolo ○ vietato usare var ○ ordine delle parole public, final, abstract, static
  • 5. Gli standard 3/3 ● PSR-3 (standardizzazione dei logger) ○ PsrLogLoggerInterface ■ definisce i classici metodi del logger: (debug, info, notice, warning, error, critical, alert, emergency). ○ LoggerAwareInterface: setLogger ○ LogLevel: costanti per i vari livelli di log
  • 6. Composer: a cosa serve? Composer è un sistema open source di gestione delle dipendenze per PHP che gestisce: ● l'installazione e l'aggiornamento le librerie PHP pubblicate sul sito packagist.org ● il caricamento delle classi secondo lo standard PSR-0 ● i vincoli sul numero di versione e stabilità
  • 7. Il perché del successo ● Descrittore facile da scrivere ● Rapidamente adottato da progetti importanti del mondo PHP ● Evita la noia dei git submodules / svn externals ● Gestisce le dipendenze transitive e i conflitti ● Grazie allo standard PSR-0 viene fornito di autoloader ● Più semplice da usare rispetto a PEAR
  • 8. Alcuni progetti ● Drupal 8 ● Tutti i prodotti Sensio (Symfony 2.1, Twig, Silex, ...) ● Doctrine ● Smarty ● UniversiBO ● Zend Framework ● ... ● Sempre in aumento!
  • 9. I file in gioco ● composer.phar: l'archivio contenente il codice PHP dell'applicazione composer ● composer.json: il descrittore dove inserire le informazioni del progetto (nome, sviluppatori, dipendenze, ecc) ● composer.lock: file gestito da composer che tiene traccia delle versioni delle librerie installate, è consigliabile metterlo sotto controllo di versione ● vendor/autoload.php: class loader
  • 10. Esempio di file composer "require": { "php": ">=5.3.3", "symfony/symfony": "2.1.*", "doctrine/orm": ">=2.2.3,<2.4-dev", "doctrine/doctrine-bundle": "1.0.*", "twig/extensions": "1.0.*", ... }
  • 11. Ma la libreria XYZ... ...non è su packagist.org! Nessun problema! È sufficiente conoscere l'url dell'archivio zip da scaricare. http://getcomposer.org/doc/04-schema. md#repositories
  • 12. Ma la libreria XYZ... ... è su un repository PEAR Nessun problema! Composer installa anche da PEAR http://getcomposer.org/doc/04-schema. md#repositories
  • 13. Non voglio pubblicare... ... le mie librerie, non voglio che siano Open Source! No problem! Packagist è software libero (MIT) e puoi installarne una copia, oppure generare un repository con Satis!
  • 14. In pratica Scaricamento del phar curl -s https://getcomposer.org/installer | php Creazione di un nuovo composer.json passo passo: php composer.phar init Aggiornamento delle dipendenze php composer.phar update Installazione a partire da composer.lock php composer.phar install
  • 15. Alcuni esempi concreti Alcuni composer.json di progetti reali. https://github. com/UniversiBO/UniversiBO/blob/master/comp oser.json https://github. com/FriendsOfSymfony/FOSUserBundle/blob/ master/composer.json https://github.com/symfony/symfony- standard/blob/2.1/composer.json
  • 16. Birra ● Tennent's ● La Frasca ● Master Beer 0 °C ?