>  기사  >  백엔드 개발  >  ThinkPHP5의 _initialize() 초기화 방법에 대한 자세한 설명

ThinkPHP5의 _initialize() 초기화 방법에 대한 자세한 설명

高洛峰
高洛峰원래의
2016-11-16 11:26:155527검색

머리말
_initialize() 이 메소드는 공식 매뉴얼에 나와 있습니다:

컨트롤러 클래스가 thinkController 클래스를 상속하는 경우 컨트롤러 초기화 메소드 _initialize를 정의할 수 있습니다. 여기서 컨트롤러 메소드보다 먼저 실행됩니다. 호출됩니다.

사실 5개 이상이 있는데, 이전 버전에서도 등장한 적이 있습니다. 구현 과정에 대해 말씀드리겠습니다.

예제
다음은 공식 매뉴얼에 나오는 예입니다.

namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
    public function _initialize()
    {
        echo &#39;init<br/>&#39;;
    }
    public function hello()
    {
        return &#39;hello&#39;;
    }
    public function data()
    {
        return &#39;data&#39;;
    }
}


http://localhost/index.php/index/Index/에 접속하시면 hello

 init
 hello

을 출력합니다.
http://localhost/index.php/index/Index/data
에 접속하면

init
data

을 출력합니다. 분석
사용은 thinkController 클래스를 상속해야 하며 이는 초기화이므로 먼저 thinkController 클래스의 __construct()를 생각해 보겠습니다.

/**
     * 架构函数
     * @param Request    $request     Request对象
     * @access public
     */
    public function __construct(Request $request = null)
    {
        if (is_null($request)) {
            $request = Request::instance();
        }
        $this->view    = View::instance(Config::get(&#39;template&#39;), Config::get(&#39;view_replace_str&#39;));
        $this->request = $request;
        // 控制器初始化
        if (method_exists($this, &#39;_initialize&#39;)) {
            $this->_initialize();
        }
        // 前置操作方法
        if ($this->beforeActionList) {
            foreach ($this->beforeActionList as $method => $options) {
                is_numeric($method) ?
                $this->beforeAction($options) :
                $this->beforeAction($method, $options);
            }
        }
    }

주의하세요. 전체 생성자에는 컨트롤러 초기화에 대한 주석이 있으며, 다음 코드는 이 초기화를 달성하는 열쇠입니다.

// 控制器初始化
if (method_exists($this, &#39;_initialize&#39;)) {
    $this->_initialize();
}

진실이 드러났나요? !

실제로 자식 클래스가 부모 클래스를 상속하면 생성자를 재정의하지 않고 자연스럽게 부모 클래스의 생성자를 상속하게 됩니다. 이에 따라 현재 클래스에 _initialize 메서드가 있는지 여부가 판단됩니다. 이것이 바로 컨트롤러 초기화의 원리입니다.

확장
하위 클래스가 상위 클래스를 상속하고 생성자 메서드를 다시 작성하는 경우 상위 클래스의 __construct()를 호출할 때 주의하세요. 그렇지 않으면 코드는 다음과 같습니다. 🎜>

public function __construct()
{
    parent::__construct();
    ...其他代码...
}
요약

간단한 작은 디자인, 간략한 분석입니다. 모든 분들께 도움이 되길 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.