Автозагрузка классов из разных папок - PullRequest
42 голосов
/ 12 марта 2011

Вот так я автоматически загружаю все классы в моей папке controllers,

# auto load controller classes
    function __autoload($class_name) 
    {
        $filename = 'class_'.strtolower($class_name).'.php';
        $file = AP_SITE.'controllers/'.$filename;

        if (file_exists($file) == false)
        {
            return false;
        }
        include ($file);
    }

Но у меня также есть классы в папке models, и я тоже хочу их автоматически загрузить - что мне делать? Должен ли я продублировать автозагрузку выше и просто изменить путь на models/ (но разве это не повторение ??)?

Спасибо.

EDIT:

это имена файлов моих классов в папке контроллера:

class_controller_base.php
class_factory.php
etc

это имена файлов моих классов в папке модели:

class_model_page.php
class_model_parent.php
etc

это то, как я обычно называю классы моего контроллера (я использую подчеркивания и нижние колпачки),

class controller_base 
{
...
}

class controller_factory
{
...
}

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

class model_page 
    {
    ...
    }

    class model_parent
    {
    ...
    }

Ответы [ 12 ]

0 голосов
/ 14 мая 2013

__ Функция autoload () не должна использоваться, потому что она не защищена. Используйте взамен spl_autoload (), spl_autoload_register (). __autoload () просто может загрузить один класс, но spl_autoload () может получить более 1 класса. И еще одно, в будущем __autoload () может устареть. Больше вещей можно найти на http://www.php.net/manual/en/function.spl-autoload.php

0 голосов
/ 08 августа 2012

Все копируют и вставляют вещи из кода, который они вышли из Интернета (за исключением выбранного ответа). Все они используют String Replace.

String Replace в 4 раза медленнее, чем strtr. Вы должны использовать его вместо этого.

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

...