示例:
$di = new Phalcon\DI\FactoryDefault\CLI();
for ($i = 1; $i < 10; $i++) {
$obj = new stdClass();
$obj->id = $i;
$di->set('obj', $obj);
var_dump($di->get('obj')->id); // same as $i
//$di->getService('obj')->resolve(); // this trick doesn't help too
var_dump($di['obj']->id); // always 1
}
我们在项目中使用arrayAccess来获取di键,我们希望能够替换di中的服务。
get和arrayAccess方法的正常行为是什么?
如果是arrayAccess,我们如何替换di中的服务?
答案 0 :(得分:0)
offsetGet()
相当于DI::getShared()
所以,如果你修改这样的代码:
-var_dump($di->get('obj')->id);
+var_dump($di->getShared('obj')->id);
在这两种情况下你都会打印1张。
看起来有一个错误unset($di['obj'])
没有杀死共享实例,也没有$di['obj']
更新对象,但我想你最好提交错误报告: - )