我想在循环中创建实例,这意味着实例的数量完全取决于循环。我无法实现它。 我发现很多关于相同的帖子并且成功了,
$this->load->library('stlstats', $param, 'instance1');
$volume1 = $this->instance1->getVolume($unit);
$this->load->library('stlstats', $param, 'instance2');
$volume2 = $this->instance2->getVolume($unit);
//Don't bother about $param and $unit, those are pre-defined.
因此,在上面的代码中,我能够实现不同的卷。但我希望每次迭代都能创建它。如果我把代码放在循环中说,
$this->load->library('stlstats', $param, 'instance1');
$volume1 = $this->instance1->getVolume($unit);
并打印$ volume1,然后输出对于所有迭代都是相同的。 由于我不知道循环的迭代次数,我该如何实现呢?
谢谢大家:)
答案 0 :(得分:0)
您将此代码置于循环中:
$volume = array(); // Store all volumes in array
for ($i = 1; $i < COUNT; $i++) {
$instance = 'instance' . $i;
$this->load->library('stlstats', $param, $instance);
$volume[$i] = $this->$instance->getVolume($unit); // Add value to array
}
但循环变量在哪里?
您始终使用相同的实例别名'instance1'。
一个简单的解决方案就是例如(COUNT是迭代次数):
{"data":[{"ID":1,"age":"24","username":"hidir"},{"ID":2,"age":"51","username":"ibrahim"}]}
答案 1 :(得分:0)
CodeIgniter缓存已加载的库,因此它将返回相同的实例。 顺便说一下,你不应该创建多个实例,而应该重新组织你的库代码(而不是在构造函数中设置params,你应该创建一个setter方法),如下所示:
// library
class Stlstats {
protected $params = array();
public function __construct() {
}
public function setParam($params) {
$this->params = $params;
}
public function getVolume($unit) {
$this->params = $params;
// example code:
return ($unit * $params['distance']);
}
}
// load once the library
$this->load->library('stlstats');
// test data
$unit = 22;
$all_params = array(
array('distance'=>3),
array('distance'=>5),
array('distance'=>7),
);
// use it in loop
foreach($all_params as $params) {
$this->stlstats->setParam($param);
echo $this->stlstats->getVolume($unit);
}
答案 2 :(得分:0)
答案很简单。我相信很多人可能会遇到这种情况,我希望能得到答案。
$this->load->library('stlstats', $param, 'instance1');
$volume1 = $this->instance1->getVolume($unit);
将上面的代码放入循环中,循环结束时包含这个,
unset($this->instance1);
就这么简单:)
谢谢你@Zaragoli你的答案让我以正确的方式思考:)干杯!!