|
发表于 2011-2-20 04:01:03
|
显示全部楼层
回复 1# nbdxkfq
其实答案就在hex的回复里面。不过根据你写的代码,我再多解释下吧。)
我这里用原生php翻译了下你上面的代码,不妨运行一下:
PHP复制代码 <?php
class Article {
var $a = 2;
function set ($test){
$this->a = $test;
}
}
$a = new Article ; // 实例化对象
$result1 = array(); // 数组1
$result2 = array(); // 数组2
array_push($result1, $a); // push对象的handler到数组1
$a->set(3); // 设置值
array_push($result2, $a); // push对象的handler到数组2
var_dump($result1, $result2); // 结果与你的预期一样吗?
复制代码
运行结果如下:
- array(1) {
- [0]=>
- object(Article)#1 (1) {
- ["a"]=>
- int(3)
- }
- }
- array(1) {
- [0]=>
- object(Article)#1 (1) {
- ["a"]=>
- int(3)
- }
- }
复制代码
产生此问题的原因:
1. CI的loader是单例模式,也就是说任何类无论你放在循环里面还是外面,始终只初始化一次。二次初始化都将被忽略。建议你打开log选项看看CI日志里面的信息。
2. 又因为你push进数组的是对象的handler(引用),而不是值。所以第二次set会覆盖掉默认的$a=2。换言之,你循环里面的array_push结构如下:
array_push($a, &$b);
这也就不难解释为什么你循环多次得到的结果是数组的最后一个元素值了。
至于解决方案,那就很简单了,push某个值而不是引用到数组里面。 |
评分
-
查看全部评分
|