Codeigniter动态多个实例,用于加载自定义库

时间:2016-04-26 06:14:02

标签: codeigniter dynamic multiple-instances

我想在循环中创建实例,这意味着实例的数量完全取决于循环。我无法实现它。 我发现很多关于相同的帖子并且成功了,

$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,然后输出对于所有迭代都是相同的。 由于我不知道循环的迭代次数,我该如何实现呢?

谢谢大家:)

3 个答案:

答案 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你的答案让我以正确的方式思考:)干杯!!