PHP новичок - PHP классы автозагрузка и защита - PullRequest
2 голосов
/ 12 октября 2011

Я заинтересован в изучении автозагрузки, но новичок в PHP.Я читаю книгу «PHP в действии», в которой записывается метод автозагрузки, например

function __autoload($className) {
 include_once __autoloadFilename($className);
}
function __autoloadFilename($className) {
 return str_replace('_','/',$className).".php";
}

Я хочу упаковать эти методы в класс.Будет ли лучше упаковать их в абстрактный класс?

Или в обычный класс и включить его в index.php?

Насколько эффективно я могу использовать функцию автозагрузки?

Спасибо

Ответы [ 2 ]

1 голос
/ 12 октября 2011

Закрепление автозагрузчика, убедитесь:

  • То, что файл, который вы пытаетесь загрузить, на самом деле является файлом. include очень похоже на eval. Например запретить включение URL через конфигурацию php .
  • То, что имя класса на самом деле является синтаксически правильным именем класса. Может быть полезно для обеспечения безопасности вещей;)

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

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

Некоторая быстро написанная заглушка класса автозагрузчика:

class MyAutoloader
{
    public function __construct()
    {
        $this->register();
    }
    public function register()
    {
        spl_autoload_register(array($this,'autoload'));
    }
    public function autoload($classname)
    {
        if ($this->isInvalidClassName($classname)) return;
        $file = $this->getFileForClassName($classname);
        if ($this->isInalidFile($file)) return;
        require $file; // bail out fatally.
    }
    ...
}

$myAutoloader = new MyAutoloader();
0 голосов
/ 12 октября 2011

Это зависит от вас.Я использую выделенный класс Loader с методом load(), который активирую с помощью:

spl_autoload_register( 'Utility_Loader::load' );
...