2013-07-28 2 views
0

Если я даю одноименное имя функции в модели Codeigniter, эта функция автоматически вызывается при загрузке модели.Функция в модели, которая называется автоматически

//controller 
$this->load->model('my_model'); 

//model 

class My_model extends CI_model { 

function my_model { 
} 

} 

В этом случае я не должен назвать свою модельную функцию как этот

$this->my_model->my_model(); 

, потому что загрузка модели вызывает функцию, а также.

Может ли кто-нибудь объяснить это поведение? Я ничего не нашел в документах по этому поводу.

ответ

1

Это общая концепция в объектно-ориентированном программировании. Функция действует как Constructor. Конструктор вызывается, когда создается экземпляр объекта.

В PHP с использованием метода __construct() рекомендуется указывать конструктор для класса. Тем не менее, в PHP 4, конструктор был объявлен, используя имя класса, так:

Для обратной совместимости, если PHP-не может найти() функции для данного класса в __construct, а класс не может наследоваться из родительского класса , он будет искать функцию конструктора старого стиля, по названию класса.

В CodeIgniter модель представляет собой класс. Поскольку у вас нет метода __construct() в вашем классе, PHP обрабатывает вашу функцию my_model как конструктор для класса (так же, как имя класса).

Возможно, вам понадобится следующий метод для вашей модели. Это остановит обработку my_model как конструктора.

function __construct() 
{ 
    // Call the Model constructor 
    parent::__construct(); 
} 

Я бы лично не назвал метод тем же именем, что и класс в PHP, поскольку это может привести к этой путанице! В документах PHP есть useful information on constructors.