я недавно наваял автолоадер для особого расклада: в каждом неймспейсе-директории может присутствовать файл __init.php в котором может быть объявлено несколько классов.
навеяло одним примером из манов и тем, что в yii присутствует yiilite.php )))
$SiteRoot/index.php, на который mod_rewrite заворачивает все запросы
<?php
require './protected/class/Site/__init.php';
\Site\App::run();
$SiteRoot/protected/class/Site/__init.php
<?php
namespace Site;
function classHandler($className)
{
static $loaded, $dir;
if (!isset($loaded)) {
$loaded = array('/Site');
$dir = __DIR__ . '/..';
}
$namespaces = explode('\\', $className);
array_pop($namespaces);
$current = '';
foreach ($namespaces as $namespace) {
$current .= '/' . $namespace;
if (in_array($current, $loaded))
continue;
$loaded[] = $current;
$fileName = $dir . $current . '/__init.php';
if (file_exists($fileName)) {
include($fileName);
}
}
if (!class_exists($className, FALSE)) {
$fileName = $dir . '/' . str_replace('\\', '/', $className) . '.php';
if (file_exists($fileName))
include($fileName);
}
}
spl_autoload_register('\\Site\\classHandler');
в этом же файле логично разместить все базовые классы и интерфейсы неймспейса \Site, если они 100% будут использованы при любой конфигурации. например классы "умных" исключений или дефолтовый контроллер.
такая группировка уменьшает количество include