这两天在学习框架的过程中对比了控制器架构函数initialize和php架构函数__construct的相关问题,在控制器中可以使用initialize函数来完成控制器初始化,值得注意的是在5.1以前的版本例如3.2+ ,5.0+的版本该函数是__initialize,5.1版本对该函数重新命名为了和模块初始化函数一致,该函数是由__construct进行调用,众所周知,该函数是php定义的类架构函数,在类实例化的时候所调用的,是魔术方法之一,具体请看PHP文档。因此官方不建议在控制器架构的时候使用__construct来完成初始化,因为think\controller在执行架构的同时还进行请求注入和视图注入以及前置方法调用,在控制器中使用__construct会覆盖父类的也就是think\controlle中的__construct造成某些控制器特性无法使用,因此要如果要使用__construct的话必须在自定义基类控制器中调用parent::__construct,确保父类架构执行,话虽如此但仍然会破坏架构执行顺序,最后还是建议使用initialize进行架构,如果要在控制器中使用initialize()+__construct,在__construct中添加self::initialize()。
补充模型初始化
模型中的架构顺序是__construc->initialize()->init(),5.1的文档已经不建议使用initialize()来初始化,如果要用的话同理要在initialize()中添加parent::initialize()来调用父类方法,最后要注意init()是静态方法!!!静态!!!这个坑踩过
