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),我们可以简单的理解一个根命名空间对应了一个类库包。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值