1. 程式人生 > >tp5.1最新的類庫使用規則

tp5.1最新的類庫使用規則

<?php
namespace app\api\controller;

use think\Controller;
use think\Request;
use app\api\controller\Send;
use app\api\controller\Oauth;

class Api
{	
	use Send;
	public function init()
	{	
		//所有ajax請求的options預請求都會直接返回200,如果需要單獨針對某個類中的方法,可以在路由規則中進行配置
		if($this->request->isOptions()){

			return self::returnMsg(200,'success');
		}
		//配置不要鑑權的方法白名單
		if(!in_array($this->request->controller().'/'.$this->request->action().'/'.strtolower($this->request->method()),config('allow_method'))){
			//授權處理
			$oauth = app('app\api\controller\Oauth');   //tp5.1容器,直接繫結類到容器進行例項化
    		return $this->clientInfo = $oauth->authenticate();;
		}

	}
}

 其中return self::returnMsg();這個方法是這個類檔案裡面沒有的,也沒有繼承相關的類,甚至不是系統的方法,那麼從何而來呢?主要就是我們use了Send的名稱空間,然後在類方法當中進行use,然後我們就可以使用這樣的類庫的類了。

但是對於這種類庫被類中直接use的類宣告有所特殊;

具體如下

<?php
namespace app\api\controller;

use think\Controller;
use think\Request;

trait Send
{

	/**
	 * 返回成功
	 */
	public static function returnMsg($code = 200,$message = '',$data = [],$header = [])
	{	
		http_response_code($code);    //設定返回頭部
        $return['code'] = (int)$code;
        $return['message'] = $message;
        $return['data'] = is_array($data) ? $data : ['info'=>$data];
        // 傳送頭部資訊
        foreach ($header as $name => $val) {
            if (is_null($val)) {
                header($name);
            } else {
                header($name . ':' . $val);
            }
        }
        exit(json_encode($return,JSON_UNESCAPED_UNICODE));
	}
}

可以看到通過的是trait的類宣告,主要是

根名稱空間是一個關鍵的概念,以上面的\think\cache\driver\File類為例,think就是一個根名稱空間,其對應的初始名稱空間目錄就是系統的類庫目錄(thinkphp/library/think),我們可以簡單的理解一個根名稱空間對應了一個類庫包。