thinkphp有类继承问题的解决办法

admin 2015年06月09日 PHP学习 1091次阅读 查看评论

在子类里写public function __construct() 会覆盖父类的__construct,导致父类没有初始化,当然会出错了。
所以一般在子类parent::__construct(); 来调用父类的初始化方法,然后再执行自己的初始化代码

解决子类,父类中均有__construct()初始化的问题

Thinkphp3.2.2 中 Call to a member function display() on a non-object 报错的问题解决


<?php
 namespace Home\Controller;
 use Think\Controller;
 class PublicController extends Controller{
    // ERROR:Call to a member function display() on a non-object
    public function __construct(){
    }
    public function index(){
        $this->display();
    }
 }
<?php
namespace Home\Controller;
use Think\Controller;
class QtController extends Controller {
//判断前台登陆的界面工作
    public function __construct(){
    parent::__construct();//先初始化父类
    //aaa();
    //bbb();
      //$this->display('a');
      echo "<meta charset='utf-8'>运行构造函数<br/>";
}
}

解决办法2.使用thinkphp自带的_initialize()方法进行子类的初始化即可



public function _initialize(){
  //  public function __construct(){
  //  parent::__construct();//先初始化父类
    //aaa();
    //bbb();
      //$this->display('a');
      //echo "<meta charset='utf-8'>运行前台的构造函数<br/>";
      //在这里判断用户登陆等信息
      //如果没有登陆直接清空session,并且跳转到登陆页面
      
      
      
}


ThinkPHP中的_initialize()的出现只是方便程序员在写子类的时候避免频繁的使用parent::__construct()
同时正确的调用框架内父类的构造函数,所以,我们在ThnikPHP中初始化子类的时候要用_initialize(),而不用__construct(),
当然你也可以通过修改框架将_initialize()函数修改为你喜欢的函数



« 上一篇 下一篇 » admin原创文章,转载请注明出处! 标签:thinkphp有类继承问题的解决办法

相关日志:

«   2019年11月   »
123
45678910
11121314151617
18192021222324
252627282930
控制面板
您好,欢迎到访网站!
  [查看权限]
网站分类
文章归档
网站收藏
友情链接
图标汇集
  • 又拍云
  • 订阅ipvb的RSS 2.0聚合