模型中的函数自动调用

时间:2013-07-28 10:45:25

标签: php codeigniter codeigniter-2

如果我给Codeigniter模型中的函数赋予相同的名称,那么在加载模型时会自动调用该函数。

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

//model

class My_model extends CI_model {

function my_model {
}

}

在这种情况下,我不必像这样调用我的模型函数

$this->my_model->my_model();

因为加载模型也会调用函数。

有人可以解释这种行为吗?我没有在文档中找到任何相关内容。

1 个答案:

答案 0 :(得分:1)

这是面向对象编程中的常见概念。该函数充当Constructor。在创建对象的实例时调用构造函数。

在PHP中,使用__construct()方法是为类声明构造函数的建议方法。但是,在PHP 4中,使用类名声明了构造函数,因此:

  

为了向后兼容,如果PHP 5找不到__construct()   给定类的函数,并且该类没有从a继承   父类,它将搜索旧式构造函数,   通过班级的名字。

在CodeIgniter中,模型是一个类。由于您的类中没有__construct()方法,因此PHP将您的my_model函数视为类的构造函数(因为它与类名相同)。

您可能需要对模型使用以下方法。这将阻止my_model被视为构造函数。

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

我个人避免在PHP中调用与该类同名的方法,因为它可能导致这种混乱! PHP的文档有一些useful information on constructors