Что все подразумевают под: «spl: _autoload () является реализацией по умолчанию __autoload ()»

Я запутался с одной вещью об автозагрузке php: spl_autoload() функция. В каждом ответе я обнаружил, что эта функция является реализацией по умолчанию __autoload, Разве PHP не должен определять реализацию по умолчанию __autoload() сам по себе, а затем, если я явно создаю __autoload() это просто переопределит это?

Если я не определю явно __autoload() функция в моем файле php, будет ли реализация по умолчанию? Является spl_autoload() какая-то внутренняя функция, если да, то почему она в php doc?

(Если это не внутренняя функция) В каждом примере spl_autoload () нет никакого вызова этой функции, только spl_autoload_register без параметров, spl_autoload_extensions и так далее. почему так? Что мне не хватает?

Цитирование из: Что такое автозагрузка; Как вы используете spl_autoload, __autoload и spl_autoload_register?

set_include_path(get_include_path().PATH_SEPARATOR.'path/to/my/directory/');
spl_autoload_extensions('.php, .inc');
spl_autoload_register();

Поскольку spl_autoload является реализацией по умолчанию __autoload ()
магический метод, PHP будет вызывать spl_autoload, когда вы попытаетесь создать экземпляр
новый класс.

Так что если я не буду звонить spl_autoload_register(), он не зарегистрирует реализацию по умолчанию? Ли spl_autoload смотреть на расширения, установленные spl_autoload_extensions(); а затем импортировать все файлы с этими расширениями из пути включения? Повторяющийся вопрос, упомянутый ранее: spl_autoload() внутренняя функция?

я знаю это __autoload() устарела, и я должен использовать spl_autoload_register(), Я просто хочу убедиться, что я знаю, как все это работает.

Благодарю.

1

Решение

Повторяющийся вопрос, упомянутый ранее: spl_autoload() внутренняя функция?

Это просто «значение по умолчанию» для spl_autoload_register если вы не передадите параметр. Вы также можете вызвать эту функцию автономно, если хотите. Поведение spl_autoload может быть настроено с spl_autoload_extensions а также set_include_path,

внутренне spl_autoload принимает полное имя класса (fqcn) в качестве пути для поиска реализации класса. (Может быть с заменой строк для разделителей каталогов). После этого он выполняет поиск в каждом элементе class_include_path после указанного файла.

spl_autoload_extensions(".php");
spl_autoload_register();
$foo = new \foo\Bar();
// now spl_autoload tries to load the file foo/Bar.php inside your class path.

Если вам нужно что-то более сложное, вы должны создать свой собственный обратный вызов для автозагрузчика. То есть что-то вроде этого

spl_autoload_register(function($class) {
$path = 'classes' . DIRECTORY_SEPERATOR;
// dont care about case
$class = strtolower($class);
// replace _ with DIRECTORY_SEPERATOR
$name = str_replace('_', DIRECTORY_SEPERATOR, $class);
// don't care about windows/unix
$name = str_replace('/', DIRECTORY_SEPERATOR, $name);
$file = $path . $name . '.php';
if (file_exists($file)) {
include ($file);
}
});

Примечание: приведенный выше пример не заботится о значении spl_autoload_extensions или же set_include_path,

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]