#1 syber
先上代码:
class myclass
{
public $tmp;
public $tmp1;
public $tmp2 = 0;
public function __construct($arr)
{
$this->tmp = $arr['a'];
$this->tmp1 = $arr['b'];
}
public function go()
{
$this->tmp2++;
echo 'Num:' . $this->tmp . ' @ a =>' . $this->tmp . ', tmp2 is: ' . $this->tmp2 . '
';
}
};
class test extends spController
{
public function myfunc()
{
$arr = array(1,2,3,4,5,6,7,8,9);
$parm = array('a'=>null, 'b'=>null);
for ($i = 0; $i < count($arr); $i++)
{
$parm['a'] = $arr[$i];
$parm['b'] = $i;
spClass('myclass', $parm)->go();
}
for ($i = 0; $i < count($arr); $i++)
{
$parm['a'] = $arr[$i];
$parm['b'] = $i;
$myclass = new myclass($parm);
$myclass->go();
}
}
};?>
运行结果:
Num:1 @ a =>1, tmp2 is: 1
Num:1 @ a =>1, tmp2 is: 2
Num:1 @ a =>1, tmp2 is: 3
Num:1 @ a =>1, tmp2 is: 4
Num:1 @ a =>1, tmp2 is: 5
Num:1 @ a =>1, tmp2 is: 6
Num:1 @ a =>1, tmp2 is: 7
Num:1 @ a =>1, tmp2 is: 8
Num:1 @ a =>1, tmp2 is: 9
Num:1 @ a =>1, tmp2 is: 1
Num:2 @ a =>2, tmp2 is: 1
Num:3 @ a =>3, tmp2 is: 1
Num:4 @ a =>4, tmp2 is: 1
Num:5 @ a =>5, tmp2 is: 1
Num:6 @ a =>6, tmp2 is: 1
Num:7 @ a =>7, tmp2 is: 1
Num:8 @ a =>8, tmp2 is: 1
Num:9 @ a =>9, tmp2 is: 1
很明显,spClass这里是把实例过的class给返回再调用了。
既然spClass能接受第二个参数,是不是应该判断如果存在第二个参数时候需要重新实例化这个类呢?
因为参数会改变的。会影响输出结果的,不重新实例化,是不能对这些预设的变量起作用的。
这个是不是应该算是bug,应该改进的地方呢?
2011-01-11 16:13:04