Краткий ответ: Вы можете написать собственный класс журнала для переопределения класса CI по умолчанию:
<?php
// this file is /application/libraries/MY_Log.php
class MY_Log extends CI_Log {
public function write_log($level = 'error', $msg, $php_error = FALSE)
{
// Put your own logging function in here.
// If you want it to still log to a file as usual, use this:
parent::write_log($level, $msg, $php_error);
}
}
Длинный ответ:
Функция load_class()
по сути является одноэлементным загрузчиком.Если класс уже был загружен, верните предыдущий экземпляр;в противном случае загрузите его и создайте синглтон.Это очень важно в таких рамках, как CI.Вы должны знать, что каждый раз, когда вы вызываете, скажем, функцию базы данных, она применяет ее к одному и тому же объекту, а не создает экземпляр нового (который может стать очень грязным).По умолчанию все библиотеки CI работают таким образом.
Важное замечание: они значительно изменили эту функцию в версии 2.0.Раньше он загружался только из папки /libraries
, но теперь он будет загружаться из /core
или из того места, которое вы указали при вызове функции.
Вот процесс загрузки, скажем, класса Log (из вашего примера):
$_log =& load_class('Log');
$_log->write_log($level, $message, $php_error);
Это запускает следующие проверки в последовательности:
- Если класс Log уже существует, мы закончили.Верните синглтон.
- Если нет, сначала проверьте папку
/system/libraries
на наличие файла "Log.php" - Если на шаге № 2 не было файла, теперь проверьте
/application/libraries
на наличиеФайл «MY_Log.php» (или любой другой префикс подкласса, заданный в вашей конфигурации) - Если загружен класс CI по умолчанию (из папки
/system
), но у вас есть расширенный класс в /application
, загрузите этот класс тоже. - Верните новый экземпляр класса (ВАШИ, если он существует; в противном случае это класс CI_ *)
Мне на самом деле никогда не было необходимостииспользовать функцию load_class()
, поскольку она позволяет расширение без проблем.Однако, хорошо знать, как это работает.
Итак, чтобы переопределить класс, сначала найдите, где находится оригинал (обычно /system/libraries
или /system/core
).Поместите свой файл расширения в соответствующую папку /application
(это важно! Если он находится под /system/core
, расширение ДОЛЖНО быть под /application/core
).Добавьте к имени файла и имени класса префикс MY_
(или что-либо еще, что вы указали в своей конфигурации), и пусть он расширяет базовый класс CI_
.