Прочитав этот хабратопик. Решил поделиться своим классом автозагрузчика (вдруг кому пригодится), который умеет рекурсивно искать нужные файлы, не только классы, но и любой другой, переданный ему файл, ну и если там где указано файл не найден, то производит поиск по всему серверу начиная от корня, если файл найден где-то не там, генерит соответствующее сообщение, умеет работать с пространством имен и логировать свои действия в случае необходимости.


<?php
namespace youNameSpace
{
  /**
   * Усовершенствованный класс автозагрузчик
   * 
   * Умеет загружать как недостающие классы, так и указанные файлы.<br/>
   * Больше нет необходимости писать инклюды, достаточно вызвать<br/>
   * функцию автозагрузки и сказать ей имя и расширене файла,<br/>
   * а можно еще и дирректорию уточнить(иначе ищем из корня), и будет счастье.
   * 
   * @author Автор: Барулин Максим
   * @version 1.0
   * @copyright: Барулин Максим
   */
  class Autoloader
  {
    /**
     *переменная, отвечающая за отладку
     * 
     * @var type const
     * 
     */
    const debug = 0;
    
    public function __construct()
    {
      ;
    }
     /**
     * Функция прямого подключения класса или файла.<br/>
     * В случае неудачи, вызывает функцию рекурсивного поиска.
     * 
     * @param string $file имя файла(без расширения)
     * @param string $ext расширение файла(без точки)
     * @param string $dir директория для поиска(без первого и последнего слешей)
      * 
     * @return string
     * @return false
     * 
     */
    public static function autoload($file, $ext = FALSE, $dir = FALSE)
    {
      $file = str_replace('\\', '/', $file);

      if($ext === FALSE)
      {
        $path = $_SERVER['DOCUMENT_ROOT'] . '/classes';
        $filepath = $_SERVER['DOCUMENT_ROOT'] . '/classes/' . $file . '.php';
      }
      else
      {
        $path = $_SERVER['DOCUMENT_ROOT'] . (($dir) ? '/' . $dir : '');
        $filepath = $path . '/' . $file . '.' . $ext;
      }
      
      if (file_exists($filepath))
      {
        if($ext === FALSE)
        {
          if(Autoloader::debug) Autoloader::StPutFile(('подключили ' .$filepath));
          require_once($filepath);
        }
        else
        {
          if(Autoloader::debug) Autoloader::StPutFile(('нашли файл в ' .$filepath));
          return $filepath;
        }
      }
      else
      {
        $flag = true;
        if(Autoloader::debug) Autoloader::StPutFile(('начинаем рекурсивный поиск файла <b>' . $file . '</b> в <b>' . $path . '</b>'));
        return Autoloader::recursive_autoload($file, $path, $ext, $flag);
      }
    }

     /**
     * Функция рекурсивного подключения класса или файла.
     * 
     * @param string $file имя файла(без расширения)
     * @param string $path путь где ищем
     * @param string $ext расширение файла
     * @param string $flag необходим для прерывания поиска если искомый файл найден
      * 
     * @return string
     * @return bool
     * 
     */
    public static function recursive_autoload($file, $path, $ext, &$flag)
    {
      if (FALSE !== ($handle = opendir($path)) && $flag)
      {
        while (FAlSE !== ($dir = readdir($handle)) && $flag)
        {
          
          if (strpos($dir, '.') === FALSE)
          {
            $path2 = $path .'/' . $dir;
            $filepath = $path2 . '/' . $file .(($ext === FALSE) ? '.php' : '.' . $ext);
            if(Autoloader::debug) Autoloader::StPutFile(('ищем файл <b>' .$file .'</b> in ' .$filepath));

            if (file_exists($filepath))
            {
              $flag = FALSE;
              if($ext === FALSE)
              {
                if(Autoloader::debug) Autoloader::StPutFile(('подключили ' .$filepath ));
                require_once($filepath);
                break;
              }
              else
              {
                if(Autoloader::debug) Autoloader::StPutFile(('нашли файл в ' .$filepath ));
                return $filepath;
              }
            }
            $res = Autoloader::recursive_autoload($file, $path2, $ext, $flag); 
          }
        }
        closedir($handle);
      }
      return $res;
    }
    /**
     * Функция логирования
     * 
     * @param string $data данные для записи
      * 
     * @return void
     * 
     */
    private static function StPutFile($data)
    {
      $dir = $_SERVER['DOCUMENT_ROOT'] .'/Log/Log.html';
      $file = fopen($dir, 'a');
      flock($file, LOCK_EX);
      fwrite($file, ('║' .$data .'=>' .date('d.m.Y H:i:s') .'<br/>║<br/>' .PHP_EOL));
      flock($file, LOCK_UN);
      fclose ($file);
    }
  }
  \spl_autoload_register('youNameSpace\Autoloader::autoload');
}

?>