示例:
$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中的服务?
发布于 2014-10-01 23:09:52
offsetGet()等同于DI::getShared()
因此,如果您像这样修改代码:
-var_dump($di->get('obj')->id); +var_dump($di->getShared('obj')->id);
在这两种情况下,您都将打印1。
看起来有一个错误,unset($di['obj'])不会杀死共享实例,$di['obj']也不会更新对象,但我想你最好为此提交一个错误报告:-)
https://stackoverflow.com/questions/26124485
复制相似问题