0

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

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

//model

class My_model extends CI_model {

function my_model {
}

}

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

$this->my_model->my_model();

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

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

4

1 回答 1

1

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

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

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

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

您可能希望对您的模型使用以下方法。这将不再my_model被视为构造函数。

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

我个人会避免调用与 PHP 中的类同名的方法,因为它会导致这种混乱!PHP 的文档有一些关于构造函数的有用信息

于 2013-07-28T17:22:20.867 回答