tp5.1最新的類庫使用規則
阿新 • • 發佈:2018-11-09
<?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
),我們可以簡單的理解一個根名稱空間對應了一個類庫包。