Використання має "gotcha", хоча це далеко не найшвидший метод, але він також очікує, що всі ваші імена файлів будуть малими літерами.
spl_autoload_extensions(".php");
spl_autoload_register();
Наприклад:
Файл, що містить клас SomeSuperClass, повинен бути названий somesuperclass.php, це готча при використанні файлової системи з урахуванням регістру, як-от Linux, якщо ваш файл названий SomeSuperClass.php, але це не проблема в Windows.
Використання __autoload у вашому коді все ще може працювати з поточними версіями PHP, однак очікуйте, що ця функція буде застарілою та остаточно видалена в майбутньому.
Отже, які варіанти залишилися:
Ця версія буде працювати з PHP 5.3 і вище та дозволяє назви файлів SomeSuperClass.php та somesuperclass.php. Якщо ви користуєтесь 5.3.2 і вище, цей автозавантажувач буде працювати ще швидше.
<?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
. Ось чому це рішення не працює. Ви можете так само легко зробити:use Person\Barnes\David\Class1;
(що еквівалентноuse Person\Barnes\David\Class1 as Class1;
).