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.
Exemple 17.4. Exemple d'inscription à la métohde de callback autoloader
<?php spl_autoload_register(array('Zend_Loader', 'autoload')); ?>
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.