Передача аргументов при загрузке пользовательской библиотеки CodeIgniter
Я пытаюсь реализовать класс, который я написал как библиотека CodeIgniter.
Как-то я не могу заставить метод CI load()
передать несколько аргументов функции конструктора классов.
Мой класс предназначен для получения 3 аргументов, 2 массивов и одной необязательной строки.
Конструктор выглядит примерно так:
public function __construct($array, $array,$string=""){
/** code **/
}
Соответствующая часть контроллера:
function index(){
$array1 = array('key1'=>'value','key2'=>'value');
$array2 = array('key1'=>'value','key2'=>'value');
$string = "value";
$params = array($array1,$array2,$string);
$this->load->library("MyClass",$params);
}
Загрузка контроллера вызывает эту ошибку:
Message: Missing argument 2 for MyClass::__construct()
Это действительно озадачивает меня. Кажется, что первый аргумент передается штрафом, а затем он вторгается во второй аргумент. Любые подсказки о том, почему это происходит, будут с благодарностью.
Ответы
Ответ 1
Вам нужно изменить конструктор класса для обработки переданных данных, как описано здесь:
http://ellislab.com/codeigniter/user-guide/general/creating_libraries.html
public function __construct($params)
{
$array1 = $params[0];
$array2 = $params[1];
$string = $params[2];
// Rest of the code
}
Ответ 2
вы забыли $on array2 при объявлении params, в результате чего он передавался как константа, которая не определена вместо массива.
Ответ 3
Передача параметров при инициализации вашего класса
В функции загрузки библиотеки вы можете динамически передавать данные в виде массива через второй параметр, и он будет передан вашему конструктору класса:
$params = array('type' => 'large', 'color' => 'red');
$this- > load- > library ('Someclass', $params);
Если вы используете эту функцию, вы должны настроить свой конструктор классов для ожидающих данных:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Someclass {
public function __construct($params)
{
// Do something with $params
}
}
?>