Автозагрузка классов и моделей

Я знаю, что автоматическая загрузка ваших контроллеров при использовании среды MVC является обычной практикой. Я сделал свой собственный мини-фреймворк, в котором контроллеры загружаются автоматически.

Есть ли какие-либо проблемы безопасности/плохие проблемы с тем, что одна и та же функция автозагрузки также загружает модели?

I.e.

function __autoload($className) { // Autoload both controllers and models.
if(stristr($className, 'Model'))
{
    if (is_readable(Ms . $className . '.php')) {
        include Ms . $className . '.php';
    }
} else {
    if (is_readable(Cs . $className . '.php')) {
        include Cs . $className . '.php';
    }
}
}

person imperium2335    schedule 02.01.2013    source источник
comment
вы должны использовать spl_autoload_register(), и ваш волшебный автозагрузчик не поддерживает пространства имен.   -  person tereško    schedule 02.01.2013
comment
@tereško Вы имеете в виду, должен ли он использовать spl_autoload_register() напрямую, не инкапсулируя его в какой-то класс, например Autoloader или Import?   -  person Yang    schedule 02.01.2013


Ответы (1)


Вы можете использовать пространства имен и spl_autoload_register(), чтобы получить такой автозагрузчик. Нет особых проблем с безопасностью, связанных с мультиавтозагрузчиком (автозагрузчик для нескольких классов классов), а не с автозагрузчиком только для контроллера.

Обычно я работаю с такими пространствами имен, как:

$home = new controller\home;
$home->actionIndex();

$users = new model\users;

$post = new view\post;

оттуда легко заменить \ в имени класса на /, чтобы получить конкретные пути к файлу (очевидно, выполняя необходимую проверку безопасности, как всегда).

person Shoe    schedule 02.01.2013