Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Le groupe PHP-FIG et les standards PSR

Le groupe PHP-FIG et les standards PSR

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.

Frédéric G. MARAND

April 02, 2014
Tweet

More Decks by Frédéric G. MARAND

Other Decks in Programming

Transcript

  1. 1/37 | PHP_FIG-14D02 | © 2014 OSInet PHP-FIG / PSR

    Frédéric G. Marand
  2. 2/37 | PHP_FIG-14D02 | © 2014 OSInet « Interopérabilité des

    frameworks » Paris, 02/04/2014
  3. 3/37 | PHP_FIG-14D02 | © 2014 OSInet

  4. 4/37 | PHP_FIG-14D02 | © 2014 OSInet Le PHP-FIG Les

    PSR en vigueur Les PSR en cours Les autres PSR
  5. 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. 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. 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. 8/37 | PHP_FIG-14D02 | © 2014 OSInet

  9. 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. 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. 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. 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. 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. 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. 15/37 | PHP_FIG-14D02 | © 2014 OSInet Le PHP-FIG Les

    PSR en vigueur Les PSR en cours Les autres PSR
  16. 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. 17/37 | PHP_FIG-14D02 | © 2014 OSInet Le PHP-FIG Les

    PSR en vigueur Les PSR en cours Les autres PSR
  18. 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. 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. 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. 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. 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. 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. 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. 25/37 | PHP_FIG-14D02 | © 2014 OSInet Interm de: PSR-1/2

    è
  26. 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. 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. 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. 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. 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. 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. 32/37 | PHP_FIG-14D02 | © 2014 OSInet Le PHP-FIG Les

    PSR en vigueur Les PSR en cours Les autres projets
  33. 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. 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. 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. 36/37 | PHP_FIG-14D02 | © 2014 OSInet Questions ?

  37. 37/37 | PHP_FIG-14D02 | © 2014 OSInet Drupal, faster http://www.osinet.fr/