le groupe php-fig et les standards psr
DESCRIPTION
Le groupe PHP-FIG s'est formé pour favoriser l'interopérabilité des frameworks PHP. Découvrez l'organisation et le fonctionnement du FIG, et les standards PHP PSR-0/PSR-4 pour l'autoloading, PSR-1/PSR-2 pour les normes de codage, PSR-3 pour le logging, les autres standards en cours d'élaboration: PSR-5 pour PHPdoc, PSR-6 pour le cache, et toutes les discussions en cours sur la standardisation PHP. Présentation donnée au meetup AFUP du 02/04/2014.TRANSCRIPT
1/37 | PHP_FIG-14D02 | © 2014 OSInet
PHP-FIG / PSRFrédéric G. Marand
2/37 | PHP_FIG-14D02 | © 2014 OSInet
« Interopérabilité des frameworks »Paris, 02/04/2014
3/37 | PHP_FIG-14D02 | © 2014 OSInet
4/37 | PHP_FIG-14D02 | © 2014 OSInet
Le PHP-FIGLes PSR en vigueurLes PSR en coursLes autres PSR
5/37 | PHP_FIG-14D02 | © 2014 OSInet
FIG: Ordre de Mission● En une phrase:
● faciliter l'interop rabilit é é● des frameworks ● entre eux
● Pas concern par:é● le fonctionnement interne des frameworks● les sites et applications livrables● le fonctionnement de PHP (internals)
6/37 | PHP_FIG-14D02 | © 2014 OSInet
FIG: objectifs initiaux● Utilisation des namespaces
● En 2009: nouveauté
● Nommage en POO● Classes, interfaces, classes de bases abstraites● Pas de traits: introduits en PHP 5.4 (2010)
● Utilisation des exceptions
http://news.php.net/php.standards/2
7/37 | PHP_FIG-14D02 | © 2014 OSInet
FIG: structure● 19-22/05/09: php-tek Chicago
● R union inopin eé é● Agavi, CakePHP, PEAR, Phing, Solar, Symfony, Zend Framework, «community-at-large»
● 23/05: Cr ation de la liste priv e «php-standards»é é● D but des malentendus avec la communauté é
● 02/06: premier membre non fondateur● Drupal demande participerà
● 09/06: Ouverture de la liste● Sous la pression de Rasmus Lerdorf
● Aujourd'hui, 38 projets participants
http://news.php.net/php.standards/29
8/37 | PHP_FIG-14D02 | © 2014 OSInet
9/37 | PHP_FIG-14D02 | © 2014 OSInet
FIG: organisation● Membres = projets, != personnes
● 1 projet = 1 voix● 32k devs Drupal == 37 devs Contao● S lection des nouveaux entrantsé
● n projets = 1 voix● Aura/Solar, Composer/Packagist, [Media]Wiki[data] ...● Assetic/Buzz, Silex/Symfony● Tous les autres projets = 1 voix
https://groups.google.com/forum/#!topic/php-fig/-twbCjA6EPM
10/37 | PHP_FIG-14D02 | © 2014 OSInet
FIG: membres non votants● Chacun peut participer
● La participation est vraiment prise en compte● Ex: Beau Simensen (Sculpin, Silex)● Ex: PSR-3 :
– inspir par Monologé– tendu par 3 membres de Drupal mais 1 seule voixé
11/37 | PHP_FIG-14D02 | © 2014 OSInet
FIG: pour qui ?● Les frameworks PHP
● Rapidement tendu aux CMS et bases d'applicationsé● Focus sur l'interop rabilité é
● Pas pour tous● Pas les utilisateurs PHP en g n ralé é
– Mais ils sont impact s par les choix de leurs outilsé
● Le rejet l' poque «standards»à é● Pas les d veloppeurs d'extensions PHPé
12/37 | PHP_FIG-14D02 | © 2014 OSInet
FIG: les livrables● PHP Standards Recommendation
● https://github.com/php-fig/fig-standards/tree/master/accepted
● Licence texte: CC BY 3.0● Licence code: MIT● Formalisme: RFC 2119● Traductions: officielles
● Application● M me les membres ne sont pas li s par les PSRê é
13/37 | PHP_FIG-14D02 | © 2014 OSInet
FIG: gouvernance● Formalis e, publiqueé
● https://github.com/php-fig/fig-standards/tree/master/bylaws
● Adh sion: «sponsor»é● PSR:
● discussions ouvertes● vote ferm de longue dur eé é● exemple: le retrait de PSR-4
14/37 | PHP_FIG-14D02 | © 2014 OSInet
FIG: ressources● Mailing-list:
● https://groups.google.com/forum/#!forum/php-fig ● http://news.php.net/php.standards (historique)
● Sites:● http://www.php-fig.org/ ● https://github.com/php-fig/fig-standards
● IRC: ● Freenode #phpfig
15/37 | PHP_FIG-14D02 | © 2014 OSInet
Le PHP-FIG
Les PSR en vigueurLes PSR en coursLes autres PSR
16/37 | PHP_FIG-14D02 | © 2014 OSInet
PSR: publi esé● PSR-0: autoloader historique
● PSR-1: conventions utiles
● PSR-2: conventions futiles
● PSR-3: logger
● PSR-4: autoloader orient packageé
17/37 | PHP_FIG-14D02 | © 2014 OSInet
Le PHP-FIGLes PSR en vigueur
Les PSR en coursLes autres PSR
18/37 | PHP_FIG-14D02 | © 2014 OSInet
PSR-0: probl me sansè● le probl meè
● gestion des inclusions● limitations d'_autoload() spl_autoload_register()→● que mettre dans la stack de spl_autoload_register()
● les principales solutions● mapping (registry): cf Drupal 6/7, Phing● name path →
– complet: PSR-0– par package: PSR-4
19/37 | PHP_FIG-14D02 | © 2014 OSInet
PSR-0: sp c. en brefé● \Vendor\Name\Space\Symbol
● vendor/name/space/symbol● PEAR-compatible pour PHP < 5.3● FooBar_Baz_Quux
● 1 symbole par fichier
● Extension .php
20/37 | PHP_FIG-14D02 | © 2014 OSInet
PSR-0: probl mes avecè● Longs chemins r p titifsé é
● Exemple Drupal 8 pre-PSR4:● \Drupal\book\Plugin\Block\BookNavigationBlock● (drupal)/core/modules/book/lib/Drupal/book/Plugin
/Block/BookNavigationBlock.php
● Nombre de fichiers: exceptions● 1 fichier par classe d'exception, 0 ligne de code● traitement des retours et exceptions
21/37 | PHP_FIG-14D02 | © 2014 OSInet
PSR-0: Composer● Composer
● Est conforme PSR-0● Est plus efficace que l'exemple standard● Supporte aussi l'autoload par mapping
● Composer + Packagist● La «killer app» qui a modernis et relanc PHPé é● Prise de conscience de l'int r t de PSR-0é ê
22/37 | PHP_FIG-14D02 | © 2014 OSInet
PSR-1: basic coding● Requiert PSR-0 (meta) PSR-4:→● Format fichiers
● UTF-8 sans BOM● Tags <?php et <?=, rien d'autre
● Symboles OU effets de bord
● Un (tout petit) peu de style
23/37 | PHP_FIG-14D02 | © 2014 OSInet
PSR-2: coding style● Requiert PSR-1
● Format du code:● visibilit sp cifi e obligatoireé é é● switch case sans break autoris , commentaire requisé● h ritage du pseudo-prot g par «_», d conseillé é é é é● abstract|final <visibility> static● 1 instruction/ligne, minuscules, 1 use par import● multilignes: d finition/appel fonctionsé
24/37 | PHP_FIG-14D02 | © 2014 OSInet
PSR-2: coding style (2/2)● Format de l'espace blanc
● fins de lignes LF, pas d'espaces avant● LF terminal de fichier● absence de ?> de fin● indentation 4 SP, longueur lignes 80/120, bracing K&R● lignes vierges minimales, extra autoris sé
● Non sp cifié é● d clarations, alignement, commentairesé● nommages, bonnes pratiques
25/37 | PHP_FIG-14D02 | © 2014 OSInet
Interm de: PSR-1/2è
26/37 | PHP_FIG-14D02 | © 2014 OSInet
PSR-3: logging● Pour tous: RFC5424 (syslog)
● LogLevel: les niveaux● LoggerInterface: 1 m thode/niveau + logé
● log($level, $message, $context)● exception sur niveau invalide● messsage:
– support au moins de string et object::__toString()– pas de moyen de le faire savoir aux clients
● les{Place.holders} {_sONt} {4utor1s3s}, ASCII only
27/37 | PHP_FIG-14D02 | © 2014 OSInet
PSR-3: logging● tableau $context
● valeurs des placeholders● l'impl mentation doit tout accepter sauf des exceptionsé● sauf dans la clef 'exception', qui peut aussi contenir autre chose● en pr sence d'erreurs/inconnu:é
– pas de throw– pas d'erreur
● utilisation des m thodes: é● toujours passer les param tres, ne pas substituerè● cf Drupal watchdog()
28/37 | PHP_FIG-14D02 | © 2014 OSInet
PSR-3: pour les loggers● AbstractLogger
● Les 8 m thodes, invoque log()é
● LoggerTrait● ne dispense pas de d clarer l'interfaceé● … un trait n'expose pas l'interface qu'il impl menteé
29/37 | PHP_FIG-14D02 | © 2014 OSInet
PSR-3: pour les frameworks● NullLogger
● Pour taire le logger sans avoir testerà● Pas forc ment une bonne id e: co t du contexteé é û
● LoggerAwareInterface● Pour la Setter Injection
● LoggerAwareTrait● impl mente LoggerAwareInterfaceé● inclut une prior t $loggeré é
30/37 | PHP_FIG-14D02 | © 2014 OSInet
PSR-4: package autoloader● Comme PSR-0, mais
● d marre un point de base du namespaceé à● Vendor\Name\Space\Symbol● space/symbol● Les «_» n'ont plus de signification● Casse libre, mais significative● Throw, erreur et retour de chargeur interdits
– classe non trouv e == erreur d'ex cution du chargeuré é
31/37 | PHP_FIG-14D02 | © 2014 OSInet
PSR-4: le ons de PSR-0ç● Soutien des filesystems non UNIX
● Z ro codeé● Trop souvent utilis comme version de r f renceé é é
● Compatibilit Composer PSR-0 et 4é● http://blog.riff.org/2014_01_04_psr4_really
● R trofit PSR-1: meta-documentsé
32/37 | PHP_FIG-14D02 | © 2014 OSInet
Le PHP-FIGLes PSR en vigueurLes PSR en cours
Les autres projets
33/37 | PHP_FIG-14D02 | © 2014 OSInet
Autre: PSR en cours● PSR en cours:
● PSR-5 PHPdoc● PSR-6 Cache
– en discussion depuis 02/2012– minimaliste, mais d saccord sur des bases comme TTL, clear()é– split base + extensions (CAS, inc...)
● HTTP– Client, depuis 03/2012, ne parvient pas passerà– Message, reboot en 01/2014
34/37 | PHP_FIG-14D02 | © 2014 OSInet
Autre: projets rejet sé● AOP
● Coding style++
● Form
● DB abstraction
● Collections
● EventDispatcher
● GoPHP55
● error_handler
● interpolation
● PSR-R (location)
● PSR-X (PSR-R loader)
● PSR-8 Mutually Assured Hug
35/37 | PHP_FIG-14D02 | © 2014 OSInet
Autre: container_interop● Standardiser les DIC
● Difficile● int r t peu partagé ê é● mais intense: initiative s par eé é
● Derni rement relanc par...è é● David N grier :-)é
36/37 | PHP_FIG-14D02 | © 2014 OSInet
Questions ?
37/37 | PHP_FIG-14D02 | © 2014 OSInet
Drupal, fasterhttp://www.osinet.fr/