我正在使用codeigniter。我在代码点火器中定义了一个库,并期望在其构造函数中有一个参数。这是我的库代码 -
################# [My Library Code Test_lib.php ] ########################
<?php
class Test_lib
{
var $params;
public function __construct($params)
{
$this->params = $params;
echo $this->params;
}
}
在codeigniter文档中,提到您可以在第二个参数中传递参数。 所以,我正在从控制器初始化它,如下所示 -
<?php
class Test_cont extends CI_Controller {
function __construct()
{
parent::__construct();
}
function test()
{
$params = "abc";
$this->load->library("test_lib",$params);
}
}
我收到以下错误 -
遇到PHP错误严重性:警告消息:缺少参数.....
请协助。
答案 0 :(得分:25)
$params
必须是数组。 From the documentation:
在库加载函数中,您可以通过第二个参数动态地将数据作为数组传递,它将传递给您的类构造函数:
$params = array('type' => 'large', 'color' => 'red'); $this->load->library('Someclass', $params);
在你的情况下,你想做这样的事情:
function test()
{
$params[] = "abc"; // $params is an array
$this->load->library("test_lib",$params);
}
答案 1 :(得分:6)
您只需要将 $ params 从变量修改为数组。希望这会起作用
function test()
{
$params = array(1=>'abc');
$this->load->library('test_lib',$params);
}
答案 2 :(得分:2)
Test_lib类
################# [My Library Code Test_lib.php ] ########################
<?php
class Test_lib {
var $parameter1;
var $parameter2;
var $parameter3;
public function __construct($parameters) {
/* array assoc */
$this->parameter1 = $parameters['argument1'];
$this->parameter2 = $parameters['argument2'];
$this->parameter3 = $parameters['argument3'];
/* object */
$oParameters = (object) $parameters;
$this->parameter1 = $oParameters->argument1;
$this->parameter2 = $oParameters->argument2;
$this->parameter3 = $oParameters->argument3;
}
}
类控制器
<?php
class Test_cont extends CI_Controller {
function __construct() {
parent::__construct();
}
function test() {
$data = array( // array assoc
'argument1' => 'String 1',
'argument2' => 'String 2',
'argument3' => 'String 3'
);
$this->load->library("Test_lib", $data);
return $this->Test_lib->parameter1;
}
echo $this->test(); // String 1
}