前言
首先在tp框架中initialize中是无法直接通过return来返回任何值的,return并不会造成脚本的中断!
环境:PHP 7.0.4 | TP5.1
说明
initialize方法
首先initialize方法是TP框架自定义的一个控制器初始化函数,在thinkphp\library\think\Controller.php中我们可以看到该函数。
/** * 构造方法 * @access public */ public function __construct(App $app = null) { $this->app = $app ?: Container::get('app'); $this->request = $this->app['request']; $this->view = $this->app['view']; // 控制器初始化 $this->initialize(); $this->registerMiddleware(); // 前置操作方法 即将废弃 foreach ((array) $this->beforeActionList as $method => $options) { is_numeric($method) ? $this->beforeAction($options) : $this->beforeAction($method, $options); } } // 初始化 protected function initialize() {}
可以看到初始化的方法是位于构造函数内的,而构造函数是一个没有返回值的特殊函数,所以return是没用的,其实这个还涉及更深的一些原理,但是这里先不做讲解,直接说应该如何返回值。
解决
我比较简单粗暴直接使用die()方法来返回,当然你也可以使用echo和exit或者die配合
die
/** * 初始化 */ public function initialize() { $this->_uid = $this->request->param('uid/d'); if ($this->_uid) { // 访问者控制 if (!$this->is_login() && !in_array($this->request->action(), array('login'))) { die('非法TOKEN登录,请求接口'); } } }
echo
/** * 初始化 */ public function initialize() { $this->_uid = $this->request->param('uid/d'); if ($this->_uid) { // 访问者控制 if (!$this->is_login() && !in_array($this->request->action(), array('login'))) { echo '非法TOKEN登录,请求接口'; die; } } }