TP5.x——initialize()中如何return

2024-08-16 11:14:14 浏览数 (2)

前言

首先在tp框架中initialize中是无法直接通过return来返回任何值的,return并不会造成脚本的中断!

环境:PHP 7.0.4 | TP5.1

说明

initialize方法

首先initialize方法是TP框架自定义的一个控制器初始化函数,在thinkphplibrarythinkController.php中我们可以看到该函数。

代码语言:javascript复制
/**
     * 构造方法
     * @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是没用的,其实这个还涉及更深的一些原理,但是这里先不做讲解,直接说应该如何返回值。

感兴趣的可以看看这个回答

https://stackoverflow.com/questions/11904255/constructor-returning-value/21099742

解决

我比较简单粗暴直接使用die()方法来返回,当然你也可以使用echo和exit或者die配合

die

代码语言:javascript复制
/**
     * 初始化
     */
    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

代码语言:javascript复制
/**
     * 初始化
     */
    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;
            }
        }
    }

0 人点赞