Разработка web-сайта о кафе, барах и ресторанах города Челябинска
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
ot;localhost";
$config[username] = "myusername";
$config[password] = "mypassword";
$config[database] = "mydatabase";
$config[dbdriver] = "mysql";
$config[dbprefix] = "";
$config[pconnect] = FALSE;
$config[db_debug] = TRUE;
$this->load->model(Model_name, , $config);
Создание библиотек
Когда мы используем термин библиотеки, то, как правило, ссылаемся на классы, которые лежат в папке libraries. Однако я хочу рассказать о том, как создавать собственные классы в каталоге application/libraries, чтобы сохранить разделение между локальными ресурсами и глобальными ресурсами фреймворка.позволяет расширять родные классы фреймворка, если просто необходимо добавить какую-то функциональность. Или можно полностью заменить родную библиотеку, просто разместив новую с идентичным названием в папке application/libraries.
Класс Database не может быть расширен или заменен, а так же для PHP 4 нельзя заменять класс Loader. Все прочие классы можно свободно расширять/заменять.
Хранение.
Созданные библиотеки классов должны быть расположены в директории application/libraries, CodeIgniter будет искать их там во время инициализации.
Правила именования:
Имена файлов с большой буквы. Например: Myclass.php
Имя класса с большой буквы. Например: class Myclass
Имя файла и имя класса должны совпадать.
Файл класса.
Классы должны следовать этому прототипу:
<?php if (!defined(BASEPATH)) exit(Нет доступа к скрипту); Someclass {some_function()
{
}
}
?>
Использование созданных пользователем классов.
Из любой функции контроллера можно инициализировать библиотеку следующей стандартной функцией:
$this->load->library(someclass);
Где someclass - это имя файла без расширения .php. Можно указать имя файла в любом регистре.
После загрузки класса, следует обращаться к нему, используя нижний регистр:
$this->someclass->some_function(); // Имя объекта всегда в нижнем регистре
Передача параметров при инициализации класса.
В функцию загрузки класса можно передать второй параметр, он будет передан в класс:
$params = array(type => large, color => red);
$this->load->library(Someclass, $params);
Если используется эта возможность, то необходимо настроить в конструкторе класса ожидание переменных:
<?php if (!defined(BASEPATH)) exit(Нет доступа к скрипту);Someclass {Someclass($params)
{
// Какие-то операции с $params
}
}
?>
Можно также передавать параметры, хранящиеся в конфигурационном файле. Необходимо создать файл с именем, аналогичным имени файла с классом и сохранить в папке application/config/. Если параметры передаются динамически, то конфигурационный файл будет недоступен.
Использование ресурсов CodeIgniter в библиотеке
Для доступа к родным ресурсам CodeIgniter в библиотеке используется функция get_instance(). Эта функция вернет супер-объект CodeIgniter.
При помощи этого можно обращаться к любой родной функции при помощи конструкции $this:
$this->load->helper(url);
$this->load->library(session);
$this->config->item(base_url);
и т.п.
$this, однако, работает только в контроллере, модели или отображении. Если нужно использовать родные классы CI внутри собственных, то можно сделать это следующим образом:
Во первых присвоить указатель на родной объект переменной:
$CI =& get_instance();
После того как присвоили объект переменной - нужно использовать эту переменную вместо $this:
$CI =& get_instance();
$CI->load->helper(url);
$CI->load->library(session);
$CI->config->item(base_url);
и т.п.
Функция get_instance() передается по ссылке:
$CI =& get_instance();
Что важно, т.к. указатель позволяет использовать оригинальный объект CodeIgniter, а не создавать его копию.
Кроме того, при работе с PHP 4 лучше избегать вызова get_instance() внутри конструктора класса. PHP 4 имеет проблемы с созданием ссылок на супер-объект CI в контроллере, т.к. объекты не существуют до тех пор, пока класс полностью не обработан.
Замена родных библиотек версиями. Достаточно назвать собственный класс таким же именем, как и родной, и CI загрузит его, вместо родного. Например, чтобы заменить родной класс Email, можно создать файл application/libraries/Email.php и создать класс внутри него:
class CI_Email {
}
Отммечу, что большинство родных классов имеют префикс CI_.
Для загрузки библиотеки используем родную функцию загрузки:
$this->load->library(email);
На данный момент класс Database не может быть заменен.
Расширение родных библиотек. Если надо расширить функциональность библиотеки, возможно добавить одну-две функции, то стоит не переопределять всю библиотеку, а просто расширить ее функциональность. Расширение класса практически идентично его замене за парой исключений: - Объявление класса должно расширять родительский класс.- Новое имя класса должно начинаться с префикса MY_ (это можно настроить).Например, чтобы расширить родной класс Email, нужно создать файл application/libraries/MY_Email.php и объявить внутри класс:
class MY_Email extends CI_Email {
}
Если в классе необходимо использовать конструктор, то нужно вызвать в нем родительский конструктор:
class MY_Email extends CI_Email {My_Email()
{::CI_Email();
}
}
Загрузка подкласса.
Для загрузки собственного подкласса, как правило, используется стандартный синтаксис. Не надо указывать здесь префикс. Так, например, для класса Email, который расширяет стандартный одноименный класс, небходимо использовать:
$this->load->library(ema