我对学习自动加载感兴趣,但对PHP不熟悉。 我正在阅读“PHP in Action”一书,它写了像
这样的自动加载方法function __autoload($className) {
include_once __autoloadFilename($className);
}
function __autoloadFilename($className) {
return str_replace('_','/',$className).".php";
}
我想在一个类中打包这些方法。将它们打包成抽象类更好吗?
或者在普通班级中将其包含在index.php中?
我可以有效地使用自动加载功能吗?
由于
答案 0 :(得分:1)
保护自动装带器,确保:
include
非常像eval
。例如disallow url inclusion via the php configuration。您还可以列出适合具体自动加载器的命名空间和/或类名。
创建一个类作为自动加载器,您不能采用静态方式,只需使用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();
答案 1 :(得分:0)
这取决于你。我使用一个名为Loader的专用类,其方法名为load()
,我用以下方法激活:
spl_autoload_register( 'Utility_Loader::load' );