关闭

thinkphp中__initialize和__construct的区别

标签: thinkphp
573人阅读 评论(0) 收藏 举报
分类:

          __construct:

       类的初始化:子类如果有自己的构造函数(__construct()),则调用自己的进行初始化,如果没有,则调用父类的构造函数进行自己的初始化。

       比如我们写一个控制器继承THINK中的Controller,代码如下:

      

class IndexController extends Controller {
	
	public function __construct()
	{
		parent::__construct();
		if(!isset($_SESSION['adminname']))
		{
			$this->redirect('/Admin/Login/index',NULL,4,'Login first!');
		}
	}
	
    public function index()
	{	
        $this->display();
    }
}
        你会发现报一个

Call to a member function display() on a non-object

        的错。这是因为子类控制器走了自己的__construct方法,而不走框架中Controller的__construct方法,因而无法加载。要在子类中走父类的方法,只需在子类构造方法中加一句代码:parent::__construct().这句代码作用就是走父类构造方法。再调试,报错没有了。

让我们继续深入探究,父类Controller中的代码如下:
         public function __construct() {
        Hook::listen('action_begin',$this->config);
        //实例化视图类
        $this->view     = Think::instance('Think\View');
        //控制器初始化
        if(method_exists($this,'_initialize'))
            $this->_initialize();
    }
        你会发现因为走了子类的构造方法因而无法走父类构造方法,因而无法加载视图。另外,代码最后两句, 走了子类中的__initialize方法。故, __initialize方法的存在是为了避免在子类中频繁调用父类__construct方法,用__initialize方法就能自动调用,在子类中也能自动走__initialize方法     

0
0
查看评论

thinkphp 中_initialize和__construct的区别

最近在模仿写一个权限管理系统,其中在继承AuthController中用到了_initialize。class AuthController extends Controller { protected function _initialize(){ } }首先,_initializ...
  • laughing2333
  • laughing2333
  • 2015-09-22 23:34
  • 2814

thinkphp篇之__construct()和__initialize()

关于thinkphp中的__construct()和_initialize()的理解 网上有很多的说法和用法,自己测试了一下,下面是根据测试结果并结合自己的理解得出的结论,如有不对的地方,欢迎大家纠正!!! 我们先看一下Thinkphp自带的Controlle类的内容(ThinkPHP\Libr...
  • CNYYGJ
  • CNYYGJ
  • 2016-12-14 23:22
  • 319

ThinkPHP之__construct()和__initialize()

ThinkPHP中的__initialize()和类的构造函数__construct() 网上有很多关于__initialize()的说法和用法,总感觉不对头,所以自己测试了一下。将结果和大家分享。不对请更正。 首先,我要说的是 1、__initialize()不是php类中的函数,php类的构造函...
  • e421083458
  • e421083458
  • 2013-11-15 14:22
  • 47241

tp框架__construct()和__initialize()

ThinkPHP中的__initialize()和类的构造函数__construct() 网上有很多关于__initialize()的说法和用法,总感觉不对头,所以自己测试了一下。将结果和大家分享。不对请更正。 首先,我要说的是 1、__initialize()不是php类中的函数,php类的...
  • xiaoxiaohui520134
  • xiaoxiaohui520134
  • 2017-06-19 23:45
  • 493

thinkphp中__construct与_initialize()的区别

熟悉THINKPHP的phper基本上都很熟悉_initialize()这个方法,我们似乎也很少去使用_construct(),除非自己写插件,否则还真是很少用到。 今天查看代码突然看到_construct()这个php自带的构造方法,我的第一感觉是比较陌生,虽然之前学习java时经常遇到,但是很...
  • hjtcn
  • hjtcn
  • 2017-11-29 17:41
  • 25

ThinkPHP initialize 和 construct的区别

子类执行方法前会自动调用父类的initialize方法,而不需要显示的parent::__construct()来调用父类的构造方法.这样就...少些了一句话...然而其实并没有什么卵用
  • ghostyusheng
  • ghostyusheng
  • 2016-07-12 11:40
  • 289

thinkphp 中__construct与_initialize()的区别

thinkphp 中__construct()与_initialize()的区别
  • BetterMan_1
  • BetterMan_1
  • 2017-07-31 16:22
  • 88

ThinkPHP中initialize和construct的不同

ThinkPHP中initialize()和construct()这两个函数都可以理解为构造函数,前面一个是tp框架独有的,后面的是php构造函数,那么这两个有什么不同呢? 在网上搜索,很多答案是两者是一样的,ThinkPHP中initialize相当于php的construct,这么说是错误...
  • xwnxwn
  • xwnxwn
  • 2014-02-01 17:34
  • 674

ThinkPHP框架中_initialize()函数的使用

_initialize()方法现在类中可以自动运行,即通过URL去调用类中的其它方法,_inlitialize()方法也会自动运行。 这个特性就有一个好处,比如开发网站会遇到下面的情况,通过登录进入后台管理页面,如果没有添加验证,直接通过url就可以进入到后台管理页面,这样很不安全,所以要在方法中...
  • tangxiaolang101
  • tangxiaolang101
  • 2015-10-15 14:14
  • 1771

ThinkPHP中_initialize()与__construct()用法

1 _initialize()不是php类中的构造函数,php类的构造函数只有__construct(). 2 类的初始化:子类如果有自己的构造函数__construct(),则调用自己的进行初始化,如果没有, 则调用父类的构造函数进行自己的初始化 3 当子类和父类都有__constr...
  • jmdxin
  • jmdxin
  • 2015-01-06 15:09
  • 346
    个人资料
    • 访问:94875次
    • 积分:1322
    • 等级:
    • 排名:千里之外
    • 原创:27篇
    • 转载:83篇
    • 译文:0篇
    • 评论:3条
    最新评论