Передача аргументов при загрузке пользовательской библиотеки 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
    }
}

?>