Динамически загружаемые классы пространства имен - PullRequest
2 голосов
/ 26 марта 2011

Я работаю над платформой Data Mapper для PHP, которая будет использовать пространства имен и полагаться исключительно на PHP5.3. Чтобы позволить другим использовать инфраструктуру и расширять ее внутренние компоненты по мере необходимости, я хотел бы поддерживать форму динамической автозагрузки, которая будет загружать запрошенный файл класса сначала из любых пользовательских пространств имен и, наконец, из пространства имен платформы.

Пока у меня есть:

class Gacela {

protected static $_instance;

protected $_namespaces = array();

protected $_sources = array();

protected $_mappers = array();

protected $_resources = array();

protected function __construct()
{
    spl_autoload_register(array(__CLASS__, 'autoload'));

    $this->registerNamespace('Gacela', dirname(realpath(__FILE__)));
}

protected function _findFile($file)
{
    if(file_exists($file) && is_readable($file)) {
        return true;
    }

    return false;
}

public static function autoload($class)
{
    $parts = explode("\\", $class);
    $self = self::instance();
    $return = false;

    if(isset($self->_namespaces[$parts[0]])) {
        $file = $self->_namespaces[$parts[0]].str_replace("\\", "/", $class).'.php';

        if($self->_findFile($file)) {
            $return = $class;
        }
    } else {

        $namespaces = array_reverse($self->_namespaces);

        foreach ($namespaces as $ns => $path) {
            $file = $path.$ns.str_replace("\\", "/", $class).'.php';

            if($self->_findFile($file)) {
                $return = $ns . $class;
                break;
            }
        }
    }

    require $file;

    return $return;
}

public static function instance()
{
    if(is_null(self::$_instance)) {
        self::$_instance = new Gacela();
    }

    return self::$_instance;
}
}

К сожалению, он просто переходит на белый экран всякий раз, когда я пытаюсь загрузить с него какие-либо классы.

Если вы хотите увидеть полный код фреймворка, его можно загрузить с github .

Кто-нибудь может дать представление о том, что может быть достигнуто?

1 Ответ

0 голосов
/ 26 марта 2011

Вы можете посмотреть на вопрос, который я задал несколько дней назад. Ответ поможет вам улучшить класс загрузчика. Здесь

...