Question

Je constate que l'ajout du chemin d'inclusion d'un dossier dont j'ai besoin ne suffit pas pour accéder aux classes.

J'ai une application de dossier / tests / qui contient l'application / tests / Test.php

est nommé Test classe Test.php sans préfixes

class Test {

}

Si j'ajoute les tests de dossier que dans le include_path

realpath(APPLICATION_PATH . '/tests')

La classe Test.php ne fonctionne pas dans les contrôleurs

new Test()

n'inclut pas le dossier dans l'inclure suffisamment de chemin?

Était-ce utile?

La solution

@StasM a raison. Mais voici un peu plus d'explications.

Le include_path dit PHP où regarder quand il exécute une include, un include_once, un require ou un require_once. Bien sûr, ces includes et requires référence toujours un particulier fichier .

Autochargement est spécifiquement de manquer cours . Lorsqu'un non encore référencé est classe à vide dans le code - en général, mais pas exclusivement, en invoquant l'opérateur new, comme dans votre exemple - alors autoloading est un processus qui peut donner un coup avec un algorithme pour le chargement de la classe. Ce processus implique généralement à partir du nom de la classe manquante et produire une collection de chemins possibles - soit absolue dans le système de fichiers ou par rapport aux entrées du include_path - du nom de la classe manquante, puis faire effectuer une include dans l'espoir que la définition de classe se trouve dans l'un d'entre eux.

Dans votre cas, vous avez appelé à une classe nommée « Test ». Le fichier contenant cette classe réside dans le fichier APPLICATION_PATH . 'tests/Test.php'. Et vous avez placé le APPLICATION_PATH . 'tests' de répertoire dans le include_path. Mais jusqu'à ce qu'il y est un algorithme d'auto-chargement en place, il n'y a aucun moyen pour le système pour connecter le nom de la classe 'Test' au nom de fichier 'Test.php'.

Le convention de nom de classe PEAR style fournirait cette connexion. Et un chargeur automatique qui emploie cette convention - comme le défaut Zend Framework autoloader -. Serait en mesure d'effectuer ce mappage de nom de classe le nom de fichier, puis include le fichier requis

En dernière complication, la convention de mise en page du répertoire classique Zend Framework lieux certaines classes ou dans des dossiers qui sont PAS sur le include_path: modèles, formulaires, services, contrôleurs, aides de vue, les aides d'action, etc. . Voilà pourquoi vous verrez souvent plus configuration du chargeur automatique - généralement dans la classe Bootstrap - définir une correspondance entre certains classnames et certains endroits dans le système de fichiers qui sont off la include_path.

Par exemple, une classe nommée « Default_Model_User » pourrait - à première vue - être devrait résider sur le include_path dans un 'Default/Model/User.php' de fichier. Mais la structure de répertoire standard de l'application veut placer ce fichier dans application / modèles / User.php. Notez le pluriel « modèles » et les minuscules « m » au nom du chemin, ainsi que la présence de « défaut » dans le nom de classe. config supplémentaire sur le chargeur automatique est nécessaire afin de comprendre que, la fournissent un modèle pour la mise en correspondance classname à nom de fichier. Ceci est habituellement accompli avec un chargeur automatique de ressources.

L'espoir de tout cela aide, que ce soit vous ou quelqu'un d'autre. Vive!

Autres conseils

Inclure des émissions de chemin où PHP chercherais scripts qu'il est sur le point d'inclure - de sorte que lorsque vous dites moteur PHP include('blah.php') rechercherait blah.php dans tous les chemins dans le include_path.

Autochargement est la fonctionnalité qui permet certaine fonction à appeler lorsque PHP détecte cette classe est nécessaire, mais pas définie. Dans cette fonction, vous pouvez utiliser le chemin d'inclusion pour trouver le fichier contenant la classe et le charger, mais ce sont des choses absolument différentes.

realpath() est lié à aucun de ceux-ci et est une fonction qui retourne chemin du système de fichiers unique d'un fichier donné, avec des choses comme .. et les liens symboliques résolus.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top