PHP新手- PHP类自动加载和安全


PHP newbie - PHP Classes autoloading and Securing

我对学习自动加载很感兴趣,但对PHP很陌生。我正在读《PHP in Action》这本书,里面写了像

这样的自动加载方法。
function __autoload($className) {
 include_once __autoloadFilename($className);
}
function __autoloadFilename($className) {
 return str_replace('_','/',$className).".php";
}

我想把这些方法打包到一个类中。将它们打包到抽象类中会更好吗?

或者在普通类中并将其包含在index.php中?

我如何有效地使用自动加载功能?

谢谢

保护自动装弹器,确保:

  • 您尝试加载的文件实际上是一个文件。includeeval很像。例如,禁止通过php配置包含url。
  • 类名实际上是一个语法正确的类名。可以帮助确保事情;)

您还可以将适合具体自动加载器的名称空间和/或类名列入白名单。

创建一个类作为自动加载器,你不能采取静态的方式,你可以用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();

你自己决定。我使用一个名为Loader的专用类和一个名为load()的方法,我使用以下命令激活它:

spl_autoload_register( 'Utility_Loader::load' );