我目前正在用 PHP 对我的框架进行编程(主要是出于教育原因,以及打发时间的一种方式)。我写了一个自动加载器,它会自动扫描目录树并检测其中的所有类并创建一个如下格式的数组:
Array(
'MyAwesomeClass' => 'path/to/file/in/some/subdirectory/MyAwesomeClass.php',
'MyOtherAwesomeClass' => 'path/to/file/MyOtherAwesomeClass.php'
// ....
);
起初,这非常整洁。因为我不需要担心我把课放在哪里。
但后来我发现这是非常资源密集的。所以我创建了一个缓存机制,并将索引序列化并保存到文件中。这将 PHP 脚本的响应时间减少了至少 50%。但它带来了一些问题。
在框架的其他类中,我经常使用如下内容:
class_exists('MyAwesomeClassController');
问题是如果我添加了新类MyAwesomeClassController
,则该类尚未在索引中并class_exists
返回 false。现在的问题是每次向框架添加新类时,我都必须删除缓存文件(让自动加载器重新创建索引)。
我尝试的另一件事(有点老套):在 Autoloader 类中,我检查了是否使用 class_exists() 调用了自动加载方法。如果是这种情况,我重新创建索引以查看是否可以在某处找到请求的类。但这似乎并不奏效,因为有时class_exists
使用一个几乎不存在的类来调用,所以这与在每个请求上重新创建索引基本上是相同的解决方案。
有什么解决办法吗?还是我必须完全重写我的 Autoloader?