如果我给Codeigniter模型中的函数赋予相同的名称,那么在加载模型时会自动调用该函数。
//controller
$this->load->model('my_model');
//model
class My_model extends CI_model {
function my_model {
}
}
在这种情况下,我不必像这样调用我的模型函数
$this->my_model->my_model();
因为加载模型也会调用函数。
有人可以解释这种行为吗?我没有在文档中找到任何相关内容。
答案 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。