rogeriopradoj / uberloader
通过Composer安装j4mie/uberloader的方法
Requires
- php: >5.2
This package is not auto-updated.
Last update: 2024-09-23 15:10:24 UTC
README
PHP5的暴力式自动加载器。
在BSD许可证下发布。
关于
你是否厌倦了框架自动加载器,它们需要在类名和文件名之间进行复杂的映射?你是否因为不得不在一个严格指定的结构中安排你的项目而感到烦恼?或者只是厌倦了多次写入 require_once
?
欢迎来到Uberloader。这是一个暴力式自动加载器,它递归地搜索你的项目目录,查找每个PHP文件以找到你想要使用的类的定义。
这听起来可能非常慢,但是一旦Uberloader找到了文件,它就会将路径缓存起来,这样下次你需要自动加载类时,查找就会非常快。
它可能不是很美观,也不是很干净,但它确实有效。
让我们看看一些代码
概念
Uberloader有两个核心概念,搜索路径和缓存后端。搜索路径是查找包含类定义的文件的目录。缓存后端是存储文件路径的接口,以便它们不需要再次搜索。Uberloader附带两个简单的缓存后端;以下将进行讨论。
安装
将uberloader.php
文件复制到你的项目目录中,并require
它
require_once 'your/path/to/uberloader.php';
最小设置:便捷方法
Uberloader提供了一个名为init
的静态便捷方法,用于实例化和注册加载器。对于仅搜索一个路径并使用基本的文件系统缓存后端的情况,它非常适合。它接受两个参数。第一个是要开始递归搜索的路径的名称,第二个是存储缓存文件的目录。
Uberloader::init(dirname(__FILE__), dirname(__FILE__) . "/cache/");
这就完成了!
手动设置
手动设置Uberloader非常简单。首先,创建一个Uberloader
类的实例
$loader = new Uberloader();
接下来,我们需要创建一个缓存后端。Uberloader附带一个简单的基于文件系统的缓存后端。这个后端的构造函数接受一个参数:存储缓存文件的目录。
$backend = new UberloaderCacheBackendFilesystem(dirname(__FILE__) . "/cache/");
然后,你应该告诉Uberloader使用这个后端
$loader->set_cache_backend($backend);
然后,添加一个用于搜索类的路径。这通常是你的应用程序的根目录
$loader->add_path(dirname(__FILE__));
最后,注册自动加载器。Uberloader提供了一个辅助方法来完成这项工作
$loader->register();
完成了。
高级设置
指定要搜索的文件扩展名
Uberloader的构造函数接受一个单个可选参数:一个要搜索的文件扩展名数组。默认为array('php')
,因此任何以.php
结尾的文件都将被搜索。
多个搜索路径
你可以通过多次调用add_path
方法添加多个路径供Uberloader搜索。你提供的路径将按添加的顺序进行搜索。
此功能允许您轻松实现类似于 Kohana 的 级联文件系统。只需按合理的顺序添加搜索路径(例如:首先添加您的应用程序,然后是自定义模块,最后是系统路径)即可,Überloader 将加载它找到的第一个类。
禁用缓存
在开发过程中,您可能希望禁用路径缓存。为此,只需将缓存后端设置为提供的 UberloaderCacheBackendDummy
实例。
$loader->set_cache_backend(new UberloaderCacheBackendDummy());
禁用缓存意味着每次加载类时都会搜索整个目录树,因此请确保在生产环境中重新启用缓存。
实现自定义缓存后端
您可能希望创建自己的自定义缓存后端(例如,将缓存的类路径存储在 Memcached 或 Redis 中)。您的缓存后端类应实现 UberloaderCacheBackend
接口,该接口要求提供三种方法:get($key)
、set($key, $value)
和 teardown()
。后一种方法在请求结束时调用一次,可以用于执行缓存或连接的必要清理。当然,您也可以实现构造函数来初始化您的缓存和任何其他必要的辅助方法。
class MyCustomCacheBackend implements UberloaderCacheBackend {
public function get($key) {
// get the value for the specified key from your cache
}
public function set($key, $value) {
// Set the given value in your cache at the specified key
}
public function teardown() {
// Disconnect or save the cache
}
}