我有一个 PHP 类,它可以与我们正在开发的 API 进行通信。我不想使用不同的 API 版本并让用户手动更新 PHP 类脚本,而是想让这个过程自动化。
此更新必须在发现更新时即时完成。这是我的想法:
- 用户的程序尝试通过我们提供的 PHP 类访问 API
- PHP 类检查更新
- 如果有更新,该类将下载该类的新版本,并希望该新版本的类来处理 API 请求。
这显然意味着 PHP 类需要对该类所在的文件具有写权限,因此它可以简单地用新版本覆盖该类。
但是旧的类现在如何通过新的类版本执行请求的 API 请求呢?在一个完美的世界里,我正在寻找一种不使用 eval() 的方法,因为这个函数在许多主机上被阻止。
详细说明:
$myApi = new MyApi;
$myApi->registerCustomer($customerData);
registerCustomer() 函数会做这样的事情:
if (classNotUpToDate) {
downloadNewClass();
registerCustomerthroughNewClass()
} else {
registerCustomerDo();
}
现在我能想到的唯一方法是:
- 将新的类版本下载到变量中
- 在该变量中,替换
class MyApi {...
为class MyApiUpdate {..
- 再次包含当前文件,加载新的、更新的类
- 创建新类的实例:
$myApiUpdate = new MyApiUpdate;
- 调用
registerCustomer()
函数:$myApiUpdate->registerCustomer($customerData);
- 用新的类代码覆盖当前文件内容(不替换)
这是在不创建新文件或使用 eval() 的情况下实现我想要的唯一方法吗?我不认为这是一个非常漂亮的方法,所以我正在寻找一种更清洁的方法来实现这一点。