如果我正确理解了SPL Autoloader的行为,它会在“全局范围”中起作用,对吗?如果我们有,比如说,这段代码:
class Autoloader {
protected static $instance = NULL;
public static function get_instance() {
NULL === self::$instance and self::$instance = new self;
return self::$instance;
}
public function init() {
spl_autoload_register(array($this,'autoload'));
}
private function autoload() {
// to the autoload magic
}
}
$autoloader = new Autoloader();
$autoloader->init();
// or
add_action('muplugins_loaded', array(Autoloader::get_instance(),'init'));
...它适用于应用程序的其余部分,或者如果挂钩到 Wordpress 操作,从挂钩开始,对吗?
在我看来,这不是很方便,特别是如果您在较大框架(例如 Wordpress)的框架中工作。有没有办法,如何通过以下方式将 SPL Autoload 的范围限制在特定的上下文中:
- 以不同的方式定义 SPL Autoload?
- 在函数中有一些特定的东西(例如
return false
在名称没有多少某种模式的类上)? - 更聪明的东西?
我知道,我可以添加一些条件语句来autoload()
避免冲突和错误,但这似乎不是很有效。
谢谢!是的,我很可能只是忽略了一些东西。
编辑
通过命名空间模拟目录结构:在 Wordpress 中实际上是不可能的,是吗?如果你追求的是某种沟通和逻辑结构,比如说,必须使用的插件和主题。(@RoyalBg)
找不到文件:如何确定什么时候找不到文件“可以”,什么时候不可以?通过函数的逻辑?在我看来,缩小自动加载器的范围将是更优雅的解决方案。(@乔恩,@马克贝克)
但是,如果我很好地理解了您的评论,SPL Autoloader 在默认情况下真正适用于“全局”。