по этому коду:
<?php
function autoload($className)
{
$className = ltrim($className, '\\');
$fileName = __DIR__ . DIRECTORY_SEPARATOR;
$namespace = '';
if ($lastNsPos = strrpos($className, '\\')) {
$namespace = substr($className, 0, $lastNsPos);
$className = substr($className, $lastNsPos + 1);
$fileName .= str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
}
$fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';
if (!file_exists($fileName)) {
return;
}
require $fileName;
}
spl_autoload_register('autoload');
1. Использование стандартных констант DIRECTORY_SEPARATOR, __DIR__ не является рудементом, так как они все еще есть в php. Используются они здесь прямо по назначению, одна для получения разделителя между папками, другая для получения текущей папки.
2.
spl_autoload_register(function ($className) {
require __DIR__ . DIRECTORY_SEPARATOR . 'autoload_' . $className . '.php';
var_dump($className);
});
new A;
new A;
new A;
При наличии файла autoload_A.php с объявленым классом A внутри, на экран выведется только один раз A. Так что использовать там require_once просто не нужно.
3. Функцию return в автозагрузке можно использовать, но нельзя использовать порождение исключений, подробно об этом можно почитать в интернете.
4. Данная функция является немного измененным копипастом из примера PSR-0. То есть, данная функция реализует подключение классов по стандарту PSR-0.
5. Прежде чем критиковать чужок год, убедитесь что у вас достаточно клалификации :lol:
_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации