2012-11-25 81 views
11

我对codeigniter很陌生, 我想知道控制器中构造函数的含义是什么。我看到了下面的代码在一个笨教程 -CodeIgniter控制器构造函数

class upload extends CI_Controller { 

    function __construct() { 
     parent::__construct(); 
     $this->load->helper(form); 
    } 

    // rest of the class... 

我的问题是当在构造函数调用 - (如控制器类实例化的每一个请求它接收)是叫每个控制器提供的请求时间

+1

您可以测试它自己:只是'的var_dump(时间())'在你的构造和刷新页面看看会发生什么。抛出的时间字符串会在页面刷新时发生变化,所以它意味着每个请求都会实例化类。 – Melkor

回答

13

那么,这是一个更普遍的PHP问题。无论如何,是的,魔术方法__construct()是在类的每个实例调用(自动),你可以在手册中看到:http://www.php.net/manual/en/language.oop5.decon.php

通常,在CI是没有必要调用构造函数,除非你真正想要一个。在你发布的例子中,代码在类的每个实例上加载助手 - 这与在每个方法中加载助手相同,只是节省了大量的输入并确保它不会被遗忘。你可以选择将你希望将alywas加载到相应自动加载数组中的库/帮助程序/模型置于config/autoload.php中(在CI手册中检查“自动加载”)

一旦你在子控制器中定义了一个构造函数, '不得不调用父类的构造函数(邮件CI_Controller类),因为主CI对象的创建位置和所有类都被加载,并且您的子控制器中也需要这些类。如果不这样做,你的孩子班级将分开建造,不会继承。

我希望我自己清楚,英语不是我的母语:)

3

构造是魔术从字面上看它称为魔术方法。 什么让构造器很酷,它会在任何方法之前为你做些事情。所以,如果你有一个管理员类,并且有人应该登录才能访问它 - 你可以检查构造函数中的登录信息,如果他们没有被授权,就会弹出它们。

在构造函数中,您可以加载您的类需要的模型,库,帮助器等,并且它们将可用于该类中的任何方法。

您可以加载方法使用的变量。这对模型非常有用。

+2

当类被初始化时构造函数只被调用一次,还是每次调用控制器内部的方法时都调用它? – Prabhu

+0

@Prabhu只有一次,除非有新的请求到达 –

0

不要在最新版的Apache &笨使用_construct()功能

使用helperlin in index()功能