Разработка 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