在Codeigniter中初始化库时传递参数

use*_*721 4 codeigniter

我是Codeigniter的新手,只是从头学习.在CI文档中,它说:

$params = array('type' => 'large', 'color' => 'red');
$this->load->library('Someclass', $params);
Run Code Online (Sandbox Code Playgroud)
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Someclass {

    public function __construct($params)
    {
        // Do something with $params
    }
}
Run Code Online (Sandbox Code Playgroud)

你能给我一个简单的例子,如何使用数组作为参数将数据从控制器传递到外部库?我想看一个简单的例子.

Wes*_*rch 7

所有Codeigniter"库"构造函​​数都需要一个参数:一个参数数组,通常在使用CI的加载器加载类时传递,如下例所示:

$params = array('type' => 'large', 'color' => 'red');
$this->load->library('Someclass', $params);
Run Code Online (Sandbox Code Playgroud)

我猜你对"用$ params做些什么"这一部分感到困惑.没有必要传递任何参数,但如果你这样做,你可以像这样使用它们:

class Someclass {
    public $color = 'blue'; //default color
    public $size = 'small'; //default size
    public function __construct($params)
    {
        foreach ($params as $property => $value)
        {
            $this->$property = $value;
        }
        // Size is now "large", color is "red"
    }
}
Run Code Online (Sandbox Code Playgroud)

如果需要,您可以随后重新初始化,如果您需要:

$this->load->library('Someclass');
$this->Someclass->__construct($params);
Run Code Online (Sandbox Code Playgroud)

另外需要注意的是,如果您的配置文件与您的类名相匹配,那么该配置将自动加载.例如,如果你有这个文件application/config/someclass.php:

$config['size'] = 'medium';
$config['color'] = 'green';
// etc.
Run Code Online (Sandbox Code Playgroud)

加载时,此配置将自动传递给"someclass"的类构造函数.


mrs*_*vas 2

在libraries目录下创建一个文件Someclass_lib.php

这是您的图书馆代码

if (!defined('BASEPATH')) exit('No direct script access allowed');

class Someclass_lib
{
    public  $type       =   '';
    public  $color      =   '';

    function Someclass_lib($params)
    {
        $this->CI   =&  get_instance();
        $this->type =   $params['type'];
        $this->color    =   $params['color'];
    }
}
Run Code Online (Sandbox Code Playgroud)

当您想要加载库时使用此代码

$params = array('type' => 'large', 'color' => 'red'); 
$this->load->library('Someclass_lib', $params);
Run Code Online (Sandbox Code Playgroud)