Question

De php.net :

  

En PHP 5, ce n'est plus nécessaire. Vous pouvez définir un __ autoload () . fonction appelée automatiquement si vous essayez d’utiliser une classe / interface qui n’a pas encore été définie. En appelant cette fonction, le moteur de script dispose d’une dernière chance de charger la classe avant que PHP ne commette une erreur.

Maintenant, je veux savoir si le fait de charger __ autoload uniquement pour charger les classes appropriées sur un site dynamique est-il une mauvaise pratique?

Mon site est configuré pour inclure des fichiers dans le fichier index.php , par exemple http://www.site.com/index.php?p=PAGE-I-WANT-TO-LOAD

Donc, si je suis dans la section forums ou dans la section blogs de mon site, je veux que seules les classes et les fonctions appropriées soient chargées. Par conséquent, j'utilise autoload mais je n'inclus jamais un fichier manuellement. Devrais-je utiliser __ autoload en dernier recours ou est-ce que ce que je fais va bien, même sur un système à trafic intense?

Était-ce utile?

La solution

mauvais? Non. __ autoload () est l'un de mes ajouts préférés à PHP 5. Il supprime la responsabilité (et la gêne) de devoir inclure / exiger manuellement les fichiers de classe nécessaires à votre application. Cela étant dit, c'est à vous, en tant que développeur, de vous assurer que seules les "classes appropriées" sont chargées. Cela se fait facilement avec un schéma de nommage structuré et une structure de répertoires. Il existe de nombreux exemples en ligne sur la façon d'utiliser correctement __autoload (), d'effectuer une recherche Google et de trouver beaucoup d'informations.

Autres conseils

Le chargement automatique est un bon moyen de charger uniquement les classes nécessaires.

En PHP 5 > = 5.1.2, la plupart des problèmes liés à l’ancien __autoload () ont disparu, grâce à spl_autoload_register () .

  

Maintenant, je veux savoir si le fait d'utiliser __autoload pour charger les classes appropriées sur un site dynamique est une mauvaise pratique.

Pas du tout. Vous pouvez compter sur le chargement automatique, il vous suffit de définir une bonne convention de dénomination et de mettre en place un chargeur automatique efficace.

Il y a un problème majeur à prendre en compte. Le chargement automatique et Zend Guard ne fonctionnent pas bien ensemble, car Zend Guard a tendance à renommer des éléments, ce qui signifie que la convention de dénomination que vous avez décidé d'utiliser ne sera probablement pas la même. Si vous utilisez Zend Guard (ou tout autre obfuscateur), vous serez probablement obligé d'inclure tous les fichiers à la main.

Voici une citation du guide d'utilisation de Zend Guard:

  

Les classes à chargement automatique ne fonctionneront pas car le nom de fichier sur le disque ne fonctionnerait pas.   correspond au nom de la classe masquée.

Le seul danger pour __autoload () est si vous définissez une fonction de chargement automatique médiocre. En règle générale, quelques performances sur le disque vous donneront un coup dur en performance. PHP recherchera les bons fichiers contenant vos classes. Le bon côté consiste à se débarrasser de tous ces appels include () agaçants.

Si les performances à ce niveau vous inquiètent, vous devriez déjà utiliser un cache d'opcode tel qu'APC.

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