__autoload + рекурсия
1.
Момору (04.09.2013 / 21:56)
Доброго времени суток, уважаемые форумчане.
Сегодня столкнулся с проблемой создания функции __autoload с рекурсивным поиском классов по вложенным директориям.
<?php
function autoload($dir, $class)
{
static $return = false;
if(is_dir($dir) && $dire = scandir($dir))
{
foreach($dire as $file)
{
if($file == '.' || $file == '..')
continue;
elseif(is_dir($dir.'/'.$file))
autoload($dir.'/'.$file, $class);
elseif(is_file($dir.'/'.$file) && substr(basename($file), 0, stripos(basename($file), '.')) == $class)
$return = $dir.'/'.$file;
}
unset($dire);
}
return $return;
}
function __autoload($class)
{
$dir = substr(AC_PHP, 0, strlen(AC_PHP) - 1);
if($require = autoload($dir, $class))
include_once($require);
}
?>
При тесте функции autoload(dir, class) вне функции автозагрузки, всё работает и находит что, надо. Но, стоит лишь поместить вызов функции autoload(dir, class) в тело функции __autoload(class) как, в дуг откуда ни возьмись, появляется куча ошибок. Типа не найден тот и тот класс.
После, в теле функции __autoload(class) пишу следующие строки
<?php
If(!function_exists(‘autoload’))
Exit(‘Таки нет’);
else exit(‘Таки да’);
?>
Вылезла строчка “Таки да”. Получается функция должна работать но, не работает.
В чем дело, не подскажите. За ранее благодарен Вам, спасибо
2.
Момору (04.09.2013 / 22:33)
Сделать функцию autoload статическим методом set класса autoload, тоже пробовал. Опять же, потерпел неудачу. В чём дело, не могу понять. Короче, капец
Добавлено через 07:59 сек.
Если поместить все классы в одну директорию и искать обходя циклом имена файлов, заменив при этом мою удобную структуру иерархии именованных директорий менее прогрессивной и соответственно менее удобной структурой любого типа. Казалось бы мелочь, но по банальному стечению обстоятельств именно она не дает мне двигаться в перед, эволюционировать, так сказать.
3.
Момору (04.09.2013 / 22:44)
Сегодня пол дня я раз за разом задавался этим вопросом но, так и не находя решения отвлекался на что то иное, более прозаичное, повседневное.
4.
Момору (04.09.2013 / 23:00)
За окном еще со вчерашнего вечера не погодилось, ночью шел дождь. Погода мягко говоря была зябкой и не приветливой. Под ногами мерзко чавкали лужи. Всю дорогу до дома я мечтал скорее удобно умоститься в мягкое кресло около теплого камина и с чашечкой горячего кофе вникнуть в премудрости веб программирования. Только это, можно сказать вселяло в меня надежду что, не всё ещё потеряно и день сегодняшний возможно принесет мне желаемую удачу. Но увы, она опять не шла в руки.
5.
Петр (05.09.2013 / 23:08)
1.
JaKazanova, запустил твой код, все нормально работает. Наверное, проблема в константе AC_PHP. Я для теста присвоил ей значение './'.
URL:
https://visavi.net/topics/38870