37
1/37 | PHP_FIG-14D02 | © 2014 OSInet PHP-FIG / PSR Frédéric G. Marand

Le groupe PHP-FIG et les standards PSR

  • Upload
    osinet

  • View
    1.512

  • Download
    1

Embed Size (px)

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.

Citation preview

Page 1: Le groupe  PHP-FIG et les standards PSR

1/37 | PHP_FIG-14D02 | © 2014 OSInet

PHP-FIG / PSRFrédéric G. Marand

Page 2: Le groupe  PHP-FIG et les standards PSR

2/37 | PHP_FIG-14D02 | © 2014 OSInet

« Interopérabilité des frameworks »Paris, 02/04/2014

Page 3: Le groupe  PHP-FIG et les standards PSR

3/37 | PHP_FIG-14D02 | © 2014 OSInet

Page 4: Le groupe  PHP-FIG et les standards PSR

4/37 | PHP_FIG-14D02 | © 2014 OSInet

Le PHP-FIGLes PSR en vigueurLes PSR en coursLes autres PSR

Page 5: Le groupe  PHP-FIG et les standards 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)

Page 6: Le groupe  PHP-FIG et les standards PSR

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

Page 7: Le groupe  PHP-FIG et les standards PSR

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

Page 8: Le groupe  PHP-FIG et les standards PSR

8/37 | PHP_FIG-14D02 | © 2014 OSInet

Page 9: Le groupe  PHP-FIG et les standards PSR

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

Page 10: Le groupe  PHP-FIG et les standards PSR

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é

Page 11: Le groupe  PHP-FIG et les standards PSR

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é

Page 12: Le groupe  PHP-FIG et les standards PSR

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ê é

Page 13: Le groupe  PHP-FIG et les standards 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

Page 14: Le groupe  PHP-FIG et les standards PSR

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

Page 15: Le groupe  PHP-FIG et les standards PSR

15/37 | PHP_FIG-14D02 | © 2014 OSInet

Le PHP-FIG

Les PSR en vigueurLes PSR en coursLes autres PSR

Page 16: Le groupe  PHP-FIG et les standards 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é

Page 17: Le groupe  PHP-FIG et les standards PSR

17/37 | PHP_FIG-14D02 | © 2014 OSInet

Le PHP-FIGLes PSR en vigueur

Les PSR en coursLes autres PSR

Page 18: Le groupe  PHP-FIG et les standards 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

Page 19: Le groupe  PHP-FIG et les standards PSR

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

Page 20: Le groupe  PHP-FIG et les standards PSR

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

Page 21: Le groupe  PHP-FIG et les standards PSR

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é ê

Page 22: Le groupe  PHP-FIG et les standards PSR

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

Page 23: Le groupe  PHP-FIG et les standards PSR

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é

Page 24: Le groupe  PHP-FIG et les standards PSR

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

Page 25: Le groupe  PHP-FIG et les standards PSR

25/37 | PHP_FIG-14D02 | © 2014 OSInet

Interm de: PSR-1/2è

Page 26: Le groupe  PHP-FIG et les standards PSR

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

Page 27: Le groupe  PHP-FIG et les standards PSR

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()

Page 28: Le groupe  PHP-FIG et les standards PSR

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é

Page 29: Le groupe  PHP-FIG et les standards PSR

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é é

Page 30: Le groupe  PHP-FIG et les standards PSR

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é é

Page 31: Le groupe  PHP-FIG et les standards PSR

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é

Page 32: Le groupe  PHP-FIG et les standards PSR

32/37 | PHP_FIG-14D02 | © 2014 OSInet

Le PHP-FIGLes PSR en vigueurLes PSR en cours

Les autres projets

Page 33: Le groupe  PHP-FIG et les standards PSR

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

Page 34: Le groupe  PHP-FIG et les standards PSR

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

Page 35: Le groupe  PHP-FIG et les standards PSR

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 :-)é

Page 36: Le groupe  PHP-FIG et les standards PSR

36/37 | PHP_FIG-14D02 | © 2014 OSInet

Questions ?

Page 37: Le groupe  PHP-FIG et les standards PSR

37/37 | PHP_FIG-14D02 | © 2014 OSInet

Drupal, fasterhttp://www.osinet.fr/