Programmer's Reference Guide

Zend_Loader

Charger les fichiers et les classes dynamiquement

La classe Zend_Loader inclut des méthodes afin de vous aider à charger des fichiers dynamiquement.

Astuce

Zend_Loader contre require_once()

Les méthodes Zend_Loader sont les meilleures à utiliser si le nom de fichier que vous devez charger est variable. Par exemple, s'il est basé sur un paramètre de la saisie de l'utilisateur ou un argument de méthode. Si vous chargez un fichier ou une classe dont le nom est constant, il n'y a aucun avantage à l'utilisation de Zend_Loader sur l'utilisation de fonctions de PHP traditionnelles comme » require_once().

Charger des fichiers

La méthode statique Zend_Loader::loadFile() charge un fichier PHP, qui peut contenir du code PHP arbitraire. Cette méthode enveloppe la fonction PHP » include(), et lance une exception Zend_Exception si le fichier n'existe pas.

Exemple #1 Exemple d'utilisation de la méthode loadFile()

<?php
Zend_Loader::loadFile($filename, $dirs=null, $once=false);
            

L'argument $filename définit le nom du fichier à charger, et il ne doit contenir aucune information concernant son chemin d'accès. Une vérification de sécurité est effectuée sur $filename. Le fichier $filename ne peut contenir que des caractères alphanumérique, des tirets ("-"), des tirets-bas ("_") ou des points ("."). Aucune de ces restrictions ne s'applique à l'argument $dirs.

L'argument $dirs définit les dossiers où rechercher le fichier. Si NULL, la recherche s'effectuera uniquement dans les dossiers définis par la variable include_path. Si c'est une chaîne ou un tableau, le ou les répertoires spécifiés seront scannés, ainsi que les dossiers définis par la variable include_path.

L'argument $once est un booléen. Si true, Zend_Loader::loadFile() utilise la fonction PHP » include_once() pour charger le fichier sinon la fonction PHP » include() est utilisée.

Charger des classes

La méthode statique Zend_Loader::loadClass($class, $dirs) charge un fichier PHP et vérifie l'existence de la classe.

Exemple #2 Exemple d'utilisation de la méthode loadClass()

<?php
Zend_Loader::loadClass('Container_Tree',
    array(
        '/home/production/mylib',
        '/home/production/myapp'
    )
);
            

La chaîne spécifiant la classe est convertie en chemin relatif en remplaçant les tirets bas ("_") par le séparateur de dossier puis en ajoutant le bloc ".php". Dans l'exemple ci-dessus, "Container_Tree" devient "Container/Tree.php".

Si $dirs est une chaîne ou un tableau, Zend_Loader::loadClass() va chercher dans les dossiers suivant l'ordre donné. Le premier fichier trouvé est chargé. Si le fichier n'existe pas dans les dossiers spécifiés $dirs, alors la recherche est effectuée dans include_path du PHP.

Si le fichier n'est pas trouvé ou que la classe n'existe pas après le chargement, Zend_Loader::loadClass() lèvera une exception Zend_Exception

Zend_Loader::loadFile() est utilisé pour le chargement, donc le nom de la classe ne peut contenir que des caractères alphanumériques et les caractères tiret ("-"), tiret bas ("_"), et point (".").

Tester si un fichier est lisible

La méthode statique Zend_Loader::isReadable($pathname) retourne true si le fichier existe dans le dossier spécifié et qu'il est lisible, sinon false.

Exemple #3 Exemple d'utilisation de la méthode isReadable()

<?php
if (Zend_Loader::isReadable($filename)) {
    // puis manipulation avec $filename
}
            

L'argument $filename spécifie le nom du fichier à vérifier. Il peut contenir des informations concernant le chemin d'accès. Cette méthode enveloppe la fonction PHP » is_readable(). La fonction PHP ne recherche pas le fichier spécifié dans les répertoires de l'include_path, contrairement à Zend_Loader::isReadable().

Utiliser l'autoloader

La classe Zend_Loader contient une méthode Zend_Loader::autoload() que vous pouvez inscrire dans le PHP SPL autoloader. Par commodité, Zend_Loader fournit la fonction registerAutoload() qui enregistre automatiquement sa méthode autoload(). Si l'extension spl_autoload n'est pas présente dans l'environnement PHP, alors la méthode registerAutoload() lèvera une Zend_Exception.

Exemple #4 Exemple d'inscription de la méthode de callback autoloader

<?php
Zend_Loader::registerAutoload();
            

Après avoir inscrit le callback vers l'autoload du Zend Framework, vous pouvez appeler une classe de Zend Framework sans l'avoir explicitement chargé auparavant. La méthode autoload utilise automatiquement Zend_Loader::loadClass() quand vous appelez une classe.

Si vous avez étendu la classe Zend_Loader, vous pouvez passer un argument optionnel à registerAutoload(), pour spécifier la classe de laquelle vous souhaitez enregistrer la méthode autoload().

Exemple #5 Exemple d'inscription de la méthode de callback autoloader d'une classe étendue

A cause de la sémantique de référencement des fonctions statiques en PHP, vous devez implémenter le code pour les méthodes loadClass() et autoload(), et la méthode autoload() doit appeler self::loadClass(). Si votre méthode autoload() délègue à son parent l'appel self::loadClass(), alors cela appelerait la méthode de même nom dans la classe parente et non dans la sous-classe.

<?php
class Mon_Chargeur extends Zend_Loader
{
    public static function loadClass($class, $dirs = null)
    {
        parent::loadClass($class, $dirs);
    }

    public static function autoload($class)
    {
        try {
            self::loadClass($class);
            return $class;
        } catch (Exception $e) {
            return false;
        }
    }}

Zend_Loader::registerAutoload('Mon_Chargeur');
            

Vous pouvez effacer un callback d'autoload. registerAutoload() a un paramètre optionel, qui est réglé à true par défaut. S'il vaut false, le callback de l'autoload est effacé de la pile des autoload SPL au lieu d'être enregistré.


Zend_Loader
blog comments powered by Disqus

Select a Version

Languages Available

Components

Search the Manual