我对学习自动加载很感兴趣,但对PHP很陌生。我正在读《PHP in Action》这本书,里面写了像
这样的自动加载方法。function __autoload($className) {
include_once __autoloadFilename($className);
}
function __autoloadFilename($className) {
return str_replace('_','/',$className).".php";
}
我想把这些方法打包到一个类中。将它们打包到抽象类中会更好吗?
或者在普通类中并将其包含在index.php中?
我如何有效地使用自动加载功能?
谢谢
保护自动装弹器,确保:
- 您尝试加载的文件实际上是一个文件。
include
和eval
很像。例如,禁止通过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' );