开发者

PHP newbie - PHP Classes autoloading and Securing

I am interested in learning autoloading, but new to PHP. I am reading the book "PHP in Action" which writes the autoload method like

function __autoload($className) {
 include_once __autoloadFilename($className);
}
function __autoloadFilename($className) {
 return str_replace('_开发者_JAVA技巧','/',$className).".php";
}

I want to pack these methods in a class. will it be better to pack them in an abstract class?

Or in normal class and including it in index.php?

How effeciently I can use the autoloading feature?

Thanks


Securing an autoloader, ensure:

  • That the file you try to load is actually a file. include is pretty much like eval. For example disallow url inclusion via the php configuration.
  • That the classname is actually a syntactically correct classname. Could be helpful to secure things ;)

You can also white-list namespaces and/or classnames that are appropriate for your concrete autoloader.

Create a class as an autoloader, you must not take the static way, you can just assign any callback with spl_autoload_register, so you can register multiple autoloaders.

Some quickly written autoloader class stub:

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();


It's up to you. I use a dedicated class called Loader with a method called load(), which I activate with:

spl_autoload_register( 'Utility_Loader::load' );
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜