__autoload + рекурсия

Печать RSS
205

Автор
Пришелец
0
Доброго времени суток, уважаемые форумчане.
Сегодня столкнулся с проблемой создания функции __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(‘Таки да’);
?>
Вылезла строчка “Таки да”. Получается функция должна работать но, не работает.
В чем дело, не подскажите. За ранее благодарен Вам, спасибо
Изменил: Момору (04.09.2013 / 21:57)
Автор
Пришелец
0
Сделать функцию autoload статическим методом set класса autoload, тоже пробовал. Опять же, потерпел неудачу. В чём дело, не могу понять. Короче, капец

Добавлено через 07:59 сек.
Если поместить все классы в одну директорию и искать обходя циклом имена файлов, заменив при этом мою удобную структуру иерархии именованных директорий менее прогрессивной и соответственно менее удобной структурой любого типа. Казалось бы мелочь, но по банальному стечению обстоятельств именно она не дает мне двигаться в перед, эволюционировать, так сказать.
Автор
Пришелец
0
Сегодня пол дня я раз за разом задавался этим вопросом но, так и не находя решения отвлекался на что то иное, более прозаичное, повседневное.
Автор
Пришелец
0
За окном еще со вчерашнего вечера не погодилось, ночью шел дождь. Погода мягко говоря была зябкой и не приветливой. Под ногами мерзко чавкали лужи. Всю дорогу до дома я мечтал скорее удобно умоститься в мягкое кресло около теплого камина и с чашечкой горячего кофе вникнуть в премудрости веб программирования. Только это, можно сказать вселяло в меня надежду что, не всё ещё потеряно и день сегодняшний возможно принесет мне желаемую удачу. Но увы, она опять не шла в руки.
П

Пацак
0
1. JaKazanova, запустил твой код, все нормально работает. Наверное, проблема в константе AC_PHP. Я для теста присвоил ей значение './'.
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск