zoukankan      html  css  js  c++  java
  • Thinkphp5.0 在自己定义一个公共方法的控制器并且继承了Controller类的时候报错

    在建立网站的时候,你通常想着把一些共有的方法提取出来,放入一个控制器内,如果你是将业务逻辑写入了构造函数里面,那么就得注意了。

    在thinkphp5.0当中,有一个初始化的方法,类似于构造函数,那就是_initialize()。

    但是如果你在父类和子类当中同时使用该方法时,会将父类的_initialize()方法覆盖掉。

    如下:我贴出部分代码:

    class Admin extends CommonMethod
    {
        private $adminModel;
        public function  _initialize(){
            $this->adminModel=new AdminModel();
        }
    }
    <?php
    
    namespace appadmincontroller;
    use thinkController;
    
    class CommonMethod extends Controller
    {
        public function _initialize(){
            if(!session("username") || !session("id")){
                $this->error("您尚未登录!","Login/index");
            }
        }
    }

    如上,我的Admin类继承了CommonMethod类,同时CommonMethod类也继承了Controller类。而我的Admin和Common类都有初始化方法_initialize()方法,此时如果你想要执行CommonMethod的_initialize()方法是不可行的,那么怎么办呢?

    解决方案如下:

    class Admin extends CommonMethod
    {
        private $adminModel;
        public function  _initialize(){
            $this->adminModel=new AdminModel();
        }
    }
    <?php
    
    namespace appadmincontroller;
    use thinkController;
    
    class CommonMethod extends Controller
    {
        public function __construct(){
            parent::__construct();
            if(!session("username") || !session("id")){
                $this->error("您尚未登录!","Login/index");
            }
        }
    }

    如上所示,我在CommonMethod里面采用了__construct()构造方法,这样就不会出现覆盖的情况了。

    请一定注意:

    如上所示,Controller类同样含有__construct()方法,此时子类CommonMethod如果不写parent::__construct()方法的话,同样会将父类的__construct()方法覆盖掉。

    那么parent::_construct()是什么呢?

    其实他表示要执行父类的构造函数,此时即使父类的构造函数被子类的覆盖掉了。因为有这句代码的实现,父类的构造函数也会被执行,就不会报错了。

  • 相关阅读:
    RTLabel 富文本
    代码复用,优化时间
    (转)分享一些免费的接口.无意中查找资料发现
    新手之使用git
    ios 清理缓存
    (转)IOS崩溃 异常处理(NSSetUncaughtExceptionHandler)
    UIApplication的理解
    新提交审核app保留检查更新入口将被拒绝
    (转)免费天气预报接口API以及全国所有地区代码!!
    Cesium快速上手9-Camera和Scene中的其他函数使用
  • 原文地址:https://www.cnblogs.com/hzStudy/p/7587422.html
Copyright © 2011-2022 走看看