# Architecture et buts

## Convention de noms des classes

Pour comprendre l'autochargement dans le Zend Framework, vous devez d'abord comprendre la relation entre nom de classe et nom de fichier.

Zend Framework a emprunté une idée de PEAR, dans lequel les noms des classes ont une relation 1:1 avec le système de fichiers. Simplement, le caractère underscore ("_") est remplacé par un séparateur de dossier pour résoudre le chemin vers le fichier, puis le suffixe "`.php`" est ajouté. Par exemple, une classe "`Foo_Bar_Baz`" va correspondre à "`Foo/Bar/Baz.php`" sur le système de fichiers. La supposition est alors que PHP résoudra les fichier relativement à l'include_path ce qui permet d'utiliser `include()` et `require()` pour chercher le fichier relativement à l'include_path.

Aussi, conformément à PEAR et au PHP project, nous utilisons et vous recommandons d'utiliser un préfixe à votre code. Cela signifie que toutes les classes que vous écrivez doivent partager un préfixe unique, par exemple, dans Zend Framework le préfixe est "Zend_". Cette convention de noms évite toute collision dans les noms des classes. Dans Zend Framework, nous utilisons la notion "d'espace de noms" ("namespace"); attention à éviter la confusion avec l'implémentation native des espaces de noms de PHP.

Zend Framework suit ces règles simples en interne et nos standards de code vous encouragent à faire de même avec le code de vos propres librairies.

## Conventions et architecture d'Autoload

Le support de l'autochargement (autoload) de Zend Framework, implémenté grâce à `Zend_Loader_Autoloader`, possède l'architecture et les buts suivants:

- Correspondance d'espace de noms. Si l'espace de noms de la classe (son préfixe) n'est pas dans une liste pré-enregistrée, retourner `FALSE` immédiatement. Ceci permet une optimisation de la recherche ainsi que l'utilisation d'autres autoloaders ou d'un autoloader global par défaut.

- Permettre un auto-chargement "de secours". Dans le cas où l'on ne peut lister ou prédéterminer les préfixes de manière claire et sûre, l'autoloader doit pouvoir être configuré pour charger n'importe quel espace de noms de classes. Notez que ce cas n'est pas recommandé car il fait intervenir des algorithmes complexes et non optimisés.

- Permettre la non-suppression des erreurs. Nous pensons -- et la plus grande partie de la communauté PHP aussi -- que la suppression des erreurs est une mauvaise idée. C'est couteux en ressources et cela masque les problèmes réels de l'application. Ainsi, par défaut, la suppression des erreurs devrait être désactivée. Cependant, si un développeur insiste pour l'activer, nous le permettons.

- Autoriser l'utilisation de fonctions d'autoload personnalisées. Certaines personnes ne veulent pas utiliser `Zend_Loader::loadClass()` pour l'autoload, mais veulent tout de même bénéficier des mécanismes du Zend Framework. `Zend_Loader_Autoloader` permet de préciser ses propres fonctions d'auto-chargement.

- Permettre la manipulation de la chaine des autoloads de la SPL. Ceci autorise la spécification d'autoloaders additionnels -- par exemple les chargeurs de ressources pour les classes n'ayant pas une correspondance 1:1 avec le système de fichiers -- ces autoloaders pouvant être chargés avant ou après l'autoloader principal de Zend Framework.