php _initialize __construct,Thinkphp5 _initialize() 和 _construct() 中无法Return

事情的起因是这样的,我在写接口的时候,也想和后台一样先判断用户是否登录,如果登录才能操作,可是其他控制器继承公共控制器之后没有反映。之后我查阅了半会资料才搞明白是怎么回事。

#### __initialize() __construct() 的含义

其实Thinkphp框架在Controller.php的构造函数中调用了_initialize(),因此_initialize()其实就相当于构造函数__construct()

官方将_initialize() 称为自动运行方法,一般我继承Controller之后,会将是否登录和一些其他其他判断写到_initialize(),然后所有需要判断的方法继承这个公共控制器就好了。

```

namespace app\service\controller;

use think\Controller;

class Base extends Controller {

public function _initialize(){

if(!session('service_id')){

return json(['status' => 1, 'msg' => '请先登录']);

}

}

}

```

然后Index.php继承Base.php

```

namespace app\service\controller;

class Index extends Base{

public function index(){

return '业务列表';

}

```

#### 结果发现:

判断用户是否登录不起作用,就很纳闷。请教朋友查阅资料之后发现:

1、构造函数是一个没有返回值的特殊函数,所有即使加上return也没意义,他不会执行的。

2、不仅php,所有面向对象的语言的构造函数都没有return。

因此正确的方法应该为:

```

namespace app\service\controller;

use think\Controller;

class Base extends Controller {

public function _initialize(){

if(!session('service_id')){

echo json(['status' => 1, 'msg' => '请先登录']);

die;

}

}

}

```

所以大家一定要注意,在构造函数里不要乱使用return。应该使用echo die;的形式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值