Table des matières
La classe Zend_Loader
inclut des méthodes afin de vous aider à charger des fichiers dynamiquement.
Zend_Loader contre require_once() | |
---|---|
Les méthodes |
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 17.1. Exemple avec 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.
La méthode statique Zend_Loader::loadClass($class, $dirs)
charge un fichier PHP et vérifie l'existence de la classe.
Exemple 17.2. Exemple avec 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é 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 execption 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 (".").
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 17.3. Exemple avec 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()
.
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 17.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.
Après enregistrement de la méthode d'autoload du Zend Framework, vous pouvez référencer une classe du Zend Framework sans devoir la charger explicitement. La méthode autoload()
utilise automatiquement Zend_Loader::loadClass()
quand vous référencez 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()
.
If you have extended the Zend_Loader class, you can give an
optional argument to registerAutoload()
, to specify
the class from which to register an autoload()
method.