Le standard PHP PSR-0
Posté le Wednesday 3 October 2012 | Catégories : PHP
Basé sur les espaces de noms, le standard PSR-0 a pour but de standardiser la façon dont les classes d'une librairie sont enregistrées en fichiers et dossiers. Le but final est de permettre de charger automatiquement (avec la fonction __autoload) le fichier correspondant à la classe de n'importe quelle librairie.
Le standard PSR-0 ne comporte en fait que quelques règles simples:
- L'espace de noms doit commencer par le nom du vendeur (ou créateur): \Nom du vendeur\Espace de noms;
- Il peut naturellement y avoir des sous-espaces de noms;
- Chaque niveau de l'espace de noms correspond à un répertoire
- Dans le nom de la classe (mais PAS dans le nom de l'espace de noms), chaque "_" correspond à un sous-répertoire;
- Chaque fichier se termine par ".php".
Par exemple, si toutes les librairies se trouvent dans "./libs":
- La classe "\Zend\Mail\Message" se trouve dans le fichier "./libs/Zend/Mail/Message.php";
- La classe "\web_d\dframework\Classe1" (ci-dessous) se trouve dans le fichier "./libs/web_d/dframework/Classe1.php"
namespace web_d\dframework;
class Classe1
{
public function hello()
{
echo "Hello!";
}
}
Si toutes les librairies externes se trouvent dans "./libs" et respectent le standard PSR-0, il est possible des les charger automatiquement à l'aide la fonction autoload suivante:
function __autoload($className)
{
$folder = "./libs/";
$className = ltrim($className, '\\');
$fileName = '';
$namespace = '';
if ($lastNsPos = strripos($className, '\\')) {
$namespace = substr($className, 0, $lastNsPos);
$className = substr($className, $lastNsPos + 1);
$fileName = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
}
$fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';
include $folder . $fileName;
}
On pourra ensuite directement utiliser les classes:
$c = new \web_d\dframework\Classe1();
$c->hello();
use web_d\dframework\Classe1;
$d = new Classe1();
$d->hello();