【发布时间】:2014-04-02 14:12:03
【问题描述】:
我使用这样的代码在一个老式框架上工作:(UserManager 是这样的多个案例的一个例子)
// Somewhere ...
$user_manager = new UserManager();
[...]
// Somewhere else ...
$user_manager = new UserManager($context_variable);
[...]
我们搜索以更新框架,以便能够在使用此框架的项目中覆盖 UserManager。首先,我们看看 Zend Service Manager / Symfony Dependency Injector 来做这样的事情:
// In the start, define services
$serviceManager = new ServiceManager();
// With configurable $user_manager_class in projects who use this framework.
$serviceManager->setService('user_manager', $user_manager_class);
// And update code of framework when use this UserManager
// Somewhere ...
$user_manager = $serviceManager->get('user_manager');
但有时在框架中 UserManager 是用构造参数调用的:
// Somewhere ...
$user_manager = new UserManager($context_variable);
[...]
在这些情况下似乎无法使用服务管理系统?在框架代码中使用的 UserManager 可能不是 Service 吗? 如果我们可以制作一个系统来为将来的实例准备类名,那么有什么干净的方法可以做到这一点?
【问题讨论】: