10 juil 2014
Catégorie

Drupal 8 est passé de PSR-0 à PSR-4 en Juin, qu'est-ce que cela signifie ?

- Le terme PSR, "Php Standard Recommandation" décrit une spécification pour les classes de chargement automatique (Autoload) des chemins de fichiers.

L'autoload permet d'inclure des fichiers sans avoir recours à des déclaration de type "include... ou include_once", en se basant sur le chemin des namespaces. (N'oublions pas que Drupal 8 est OOP).
L'autoload permet aussi le "Lazyloading", soit ne charger que les classes qui vont être utilisées.

Voici un exemple simple "d'autoloadeur" :

function mon_autoloadeur($namespace)
{
  $namespace_array = explode("\\", $namespace); // On récupère les termes du namespace
  $class = end($namespace_array); // On prend le dernier terme
  $file_location = __DIR__ . '/lib/' . $class . '.php'; // On l'insère dans le chemin du fichier
  include $file_location; // on inclue la classe sans include_once
}

spl_autoload_register('mon_autoloadeur');  //  Enregistre une fonction dans la pile _autolad() 
// (http://www.php.net/manual/fr/function.spl-autoload-register.php)

 

Pour revenir à PSR-4, il permet d'avoir une hiérarchie de dossiers de fichiers de classe plus courte :

- Auparavant avec (PSR-0):
    lib/Drupal/monmodule/Controller/MonModuleController.php

- Maintenant (PSR-4):
   src/Controller/MonModuleController.php

Soit deux niveaux de hiérarchie en moins! Une simplification bienvenue.

Note : Bien que Drupal 8 soit passé à PSR-4, Symfony suit le standard PSR-0 et certaines parties de Drupal suivent un autre standard comme le PSR-3
Pour l'instant il n'est pas évident de savoir quel sera l'impact réel de l'adoption de PSR-4 dans Drupal 8.