Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

2/37 | PHP_FIG-14D02 | © 2014 OSInet « Interopérabilité des frameworks » Paris, 02/04/2014

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

4/37 | PHP_FIG-14D02 | © 2014 OSInet Le PHP-FIG Les PSR en vigueur Les PSR en cours Les autres PSR

Slide 5

Slide 5 text

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)

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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 é

Slide 11

Slide 11 text

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 é

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

15/37 | PHP_FIG-14D02 | © 2014 OSInet Le PHP-FIG Les PSR en vigueur Les PSR en cours Les autres PSR

Slide 16

Slide 16 text

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 é

Slide 17

Slide 17 text

17/37 | PHP_FIG-14D02 | © 2014 OSInet Le PHP-FIG Les PSR en vigueur Les PSR en cours Les autres PSR

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

22/37 | PHP_FIG-14D02 | © 2014 OSInet PSR-1: basic coding ● Requiert PSR-0 (meta) PSR-4: → ● Format fichiers ● UTF-8 sans BOM ● Tags

Slide 23

Slide 23 text

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 static ● 1 instruction/ligne, minuscules, 1 use par import ● multilignes: d finition/appel fonctions é

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

25/37 | PHP_FIG-14D02 | © 2014 OSInet Interm de: PSR-1/2 è

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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 é

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

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 é

Slide 32

Slide 32 text

32/37 | PHP_FIG-14D02 | © 2014 OSInet Le PHP-FIG Les PSR en vigueur Les PSR en cours Les autres projets

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

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

Slide 35

Slide 35 text

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

Slide 36

Slide 36 text

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

Slide 37

Slide 37 text

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