Я хотел бы создать несколько экземпляров класса в CodeIgniter. Я создал свой класс как библиотеку, но не могу понять, какой синтаксис использовать для создания нескольких экземпляров.Как создать несколько экземпляров класса библиотеки в CodeIgniter?
ответ
От руководства CodeIgniter пользователей:
Назначение библиотеки с другим именем объекта
Если третий (необязательный) параметр пустым, библиотека, как правило, будет be , присвоенный объекту с тем же именем как библиотека. Например, если библиотека называется Session, ей будет присвоена $ this-> session.
Если вы хотите установить свой собственный класс имена, которые вы можете передать его значение в третьего параметра: $ this-> load-> библиотеки («сессии», «», «my_session»);
класс // Session теперь доступен с помощью:
$ this-> my_session
Я думаю, что это то, что вы ищете.
Я знаю, что этот протектор давно прошел, но это был один из вопросов, которые я встретил, ища свой ответ. Итак, вот мое решение ...
Это PHP. Создайте свой класс в качестве библиотеки, загрузите его с помощью стандартного класса загрузчика CI, но используйте его, как в обычном PHP-скрипте.
Создайте свой класс:
class My_class {
var $number;
public function __construct($given_number){
$number = $given_number;
}
public function set_new_num($given_number){
$number = $given_number;
}
}
нагрузки это:
// This will load the code so PHP can create an instance of the class
$this->load->library('My_class');
Затем экземпляр и использовать объект, где это необходимо:
$num = new My_class(24);
echo $num->number;
// OUTPUT: 24
$num->set_new_num(12);
echo $num->number;
// OUTPUT: 12
Единственный раз, когда я использую $ this-> my_class - делать вызовы статических функций, которые я кодирую.
не работает. Вы не можете определить paramater в конструкции, а затем загрузить такую библиотеку и инициировать экземпляр в CI. он выдает ошибку, так как он ожидает, что вы загрузите ее так: $ this-> load-> library ('My_class', $ given_number) – mixix
Могу ли я спросить, как вернуть экземпляр обратно, чтобы сохранить его в массиве например? [внутри контроллера] $ this-> someclass; дает текущий экземпляр каждый раз? Причина: Я сделал следующее с разными параметрами $ params для каждого, но в результате я получил первый объект, а не два: $ this-> load-> library ('SomeClass', $ params); print_r ($ this-> someclass); $ this-> load-> library ('SomeClass', $ params); print_r ($ this-> someclass); – limitcracker
Извините за возрождение этой темы, но я думаю, что у меня может быть что-то разумное для добавления.
Вы можете сделать это, чтобы добавить несколько экземпляров класса. Я не знаю, нарушает ли это стандартное использование codeigniter в любом случае, но выглядит скорее как codeigniter-ish, чем загрузка библиотеки (которая создает $ this-> имя_библиотеки, которая не используется), а затем делает 2 MORE экземпляра с «новым» ключевым словом.
$this->load->library('my_library', '', 'instance1');
$this->load->library('my_library', '', 'instance2');
$this->instance1->my_class_variable = 1;
$this->instance2->my_class_variable = 2;
echo $this->instance1->my_class_variable; // outputs 1
echo $this->instance2->my_class_variable; // outputs 2
Я использую это в своем коде для создания разных меню. У меня есть класс «меню» и разные экземпляры для каждого меню, в каждом из которых есть разные пункты меню.
Я уверен, что он имеет значение: $ one = new Class; $ two = новый класс ('but_different'); – Garrett
Очень полезно-спасибо! – mpemburn