Trait解释
php从以前到现在一直都是单继承的语言,无法同时从两个基类中继承属性和方法,为了解决这个问题,php出了Trait这个特性
用法:在类中使用use关键字,声明要组合的trait名称。具体的trait声明使用trait关键字,trait不能实例化。
(假装会解释一样,其实是在网上抄的)
摘抄链接:https://blog.csdn.net/qq_35255775/article/details/80610586
一、按个人理解就是在类中引入其它类的方法,只不过我们在PHP中只能继承一个类的属性和方法,用trait的话多少个都可以,只需要use一下
二、我一般拿来写公用的方法(接口统一返回json,递归无限极分类,微信开发中生成随机字符串......等等)
开始编写代码(实现Json格式输出)
在laravel框架中创建ResponseJson.php文件,具体路径 “ app\Http\Response\ ResponseJson.php”
<?php
namespace app\Http\Response;
/**
* 统一接口返回到前端的文件
* Trait方式返回
* php从以前到现在一直都是单继承的语言,
* 无法同时从两个基类中继承属性和方法,为了解决这个问题,php出了Trait这个特性
*/
trait ResponseJson
{
/**
* 返回一个json
* @param $code 状态码
* @param $message 返回说明
* @param $data 返回数据集合
* @return false | string
*/
private function jsonResponse($code, $message, $data){
$content = [
'code' => $code,
'msg' => $message,
'data' => $data
];
return json_encode($content);
}
/**
* 成功的时候返回结果
* @param $data 返回数据集合
* @return false | string
*/
public function jsonSuccessData( $data = [] ){
return $this->jsonResponse(0, 'success', $data);
}
/**
* 失败的时候返回
* @param $code 状态码
* @param $message 返回说明
* @param $data 返回数据集合
* @return false | string
*/
public function jsonErrorData( $code, $message, $data = [] ){
return $this->jsonResponse($code, $message, $data);
}
}
在控制器中使用Trait
- 这个控制器已经继承了名叫BasicsController
- 在这个控制器中 use ResponseJson;
3.直接在控制器方法中$this就可以调用
<?php
namespace App\Http\Controllers\xiaocx;
use App\Http\Controllers\BasicsController as Base;
use App\Http\Response\ResponseJson;
use Illuminate\Support\Facades\DB;
class BannerController extends Base
{
use ResponseJson; // 引入Trait统一返回Json的方法
public function index(){
// 调用失败时的返回方法
return $this->jsonErrorData(1001, '用户名或密码错误');
// 前台输出 {"code":1001,"msg":"用户名或密码错误","data":[]}
// 调用成功时的返回方法
return $this->jsonSuccessData(['a'=>123132, 'b'=> 666666]);
// 前台输出 {"code":0,"msg":"success","data":{"a":123132,"b":666666}}
}
}
网友评论