thinkphp 文件里面既有__initialize()又有__construct(),是否一起起作用呢?

查看:110
本文介绍了thinkphp 文件里面既有__initialize()又有__construct(),是否一起起作用呢?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

thinkphp 文件里面既有__initialize()又有__construct(),是否一起起作用呢?

class Controller{
    public function _initialize(){
    }
    
    public function _construct(){
    }

}

解决方案

__construct()是类的构造函数,_initialize()只是thinkphp定义的一个特殊的方法而已。
正常情况下子类继承父类,子类初始化且同时要调用父类的初始化的写法是这样的

class A 
{
    public function __construct()
    {
        //todo
    }
}

class B extends A 
{
    public function __construct()
    {
         parent::__construct(); 
    }    
}

但是thinkphp呢,觉得频繁调用parent::__construct太麻烦了,所以他在基类的时候做了这样一件事。


这方法就是父类调用子类的方法_initialize()在父类里初始化,子类没有构造函数,所以直接继承父类的构造函数,达到初始化的效果。

好吧,废化说了一大堆现在回答你的问题吧。
thinkphp 文件里面既有__initialize()又有__construct(),是否一起起作用呢?
嗯,这个问题好纠结,不知道怎么回答,怕回答不全,因为赶脚分好多情况啊,我就说比较普遍的情况吧。

作死型

class AController extends Controller {
    public function _initialize(){
    }
    
    public function __construct(){
       /**
        * 如果子类不写parent::__construct()的话,那当然就不会一起作用啦。
        * 但为什么又说是作死呢,因为如果不继承父类的构造函数,很多功能就用不了啦
        * 不做死就不会死
        */  
    }

}

比较正常型

class AController extends Controller {
    public function _initialize(){
    }
    
    public function __construct(){
       parent::__construct();
       /**
        * 如果两个_initialize()和__construct()里面的代码功能不重复的话,
        * 还有我脑子没瓦特的话,应该是一起起作用的
        */
    }

}

题外话,既然都使用tp框架了,就按照人家订的规则来写就好啦,子类初始化的时候直接使用_initialize()就好了,为什么非要那么叛逆用__construct()呢?听话做个乖孩子不好嘛

这篇关于thinkphp 文件里面既有__initialize()又有__construct(),是否一起起作用呢?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆