L'utilisation a un piège, bien que ce soit de loin la méthode la plus rapide, elle s'attend également à ce que tous vos noms de fichiers soient en minuscules.
spl_autoload_extensions(".php");
spl_autoload_register();
Par exemple:
Un fichier contenant la classe SomeSuperClass devrait être nommé somesuperclass.php, c'est un piège lors de l'utilisation d'un système de fichiers sensible à la casse comme Linux, si votre fichier est nommé SomeSuperClass.php mais pas un problème sous Windows.
L'utilisation de __autoload dans votre code peut toujours fonctionner avec les versions actuelles de PHP, mais attendez-vous à ce que cette fonctionnalité devienne obsolète et finalement supprimée à l'avenir.
Alors, quelles sont les options restantes:
Cette version fonctionnera avec PHP 5.3 et supérieur et autorise les noms de fichiers SomeSuperClass.php et somesuperclass.php. Si vous utilisez 5.3.2 et versions ultérieures, cet autochargeur fonctionnera encore plus rapidement.
<?php
if ( function_exists ( 'stream_resolve_include_path' ) == false ) {
function stream_resolve_include_path ( $filename ) {
$paths = explode ( PATH_SEPARATOR, get_include_path () );
foreach ( $paths as $path ) {
$path = realpath ( $path . PATH_SEPARATOR . $filename );
if ( $path ) {
return $path;
}
}
return false;
}
}
spl_autoload_register ( function ( $className, $fileExtensions = null ) {
$className = str_replace ( '_', '/', $className );
$className = str_replace ( '\\', '/', $className );
$file = stream_resolve_include_path ( $className . '.php' );
if ( $file === false ) {
$file = stream_resolve_include_path ( strtolower ( $className . '.php' ) );
}
if ( $file !== false ) {
include $file;
return true;
}
return false;
});
AS
. Ce n'est pas pourquoi cette solution fonctionne. Vous pouvez tout aussi facilement faire:use Person\Barnes\David\Class1;
(ce qui équivaut àuse Person\Barnes\David\Class1 as Class1;
).