ThinkPHP--initialize()方法

       最近部门赶项目在做一个微商城,在做后台时,做用户信息功能这块,出现一个问题,就是在public/header 文件中,需要在头部显示用户姓名和状态,底层写了个base控制器,控制器中判断用户是否登录,并将用户信息assign到页面,所有(除了login)控制器都继承这个base控制器,但在渲染时,发现所有模块下都无法识别username ,想来想去,一直找不到原因,后来,突然灵机一动,发现父类base控制器和子控制器中都有一个_initialize()这个构造函数,理论上说,若子类中方法与父类中的方法同名,在子类中是会重载这个方法的,所以,之前assign 的username变量所在的方法一遍重载,根本不存在,要想使 两个同名方法都起作用,需要在子类_initialize()方法中添加:

parent::_initialize();

举个例子:

创建的FatherAction.class.php文件

<?php

class FatherAction extends Action{
  public function __construct(){
    echo 'father';
  }
}

?>

创建的SonAction.class.php文件

<?php

class SonAction extends FatherAction{
  public function __construct(){
    echo 'son';
  }
    function index(){

    }
}

?>

运行子类SonAction里的index()可以看到输出的结果:

son

如果将子类改为:

<?php

class SonAction extends FatherAction{
   public function __construct(){
    parent::__construct();
    echo 'son';
   }
  function index(){

  }
}

?>

运行结果为;

fatherson

 

上面的结果可以得出结论:

在执行子类的构造函数时并不会自动调用父类的构造函数,如果你要调用的话,那么要加上parent::__construct()

 

当我们把上述的构造方法改为THINKPHP_initialize()方法时运行会发现:结果与前面的一致,若要执行父类的_initialize()方法,也需要使用这一句:

parent::_initialize()


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值