在日常开发中,可能对接三方接口,比如根据根据快递单号查询快递跟踪的接口,其接口返回的值是固定的,比如
{"code":100000,"message":"获取成功","data":[{"time":"2020-01-01 11:00:00","log":"已接单"},......]}
当获取到此数据的时候,可能利用 json_decode 解序后获取对应的数组数据,而后在进行逻辑判断,但是是不是感觉不是很优雅。
能否封装到一个对象中,然后想调用对象方法一样使用它,比如 $res->code 就可以直接获取到 100000。
那么如何优雅的使用,那么就涉及到了 BaseObject。
封装
<?phpnamespace app\base;use yii\base\BaseObject;use Exception;class Result extends BaseObject{private $_code = 0;private $_message = '';private $_data = null;/**** @return mixed*/public function getCode (){return $this->_code;}/**** @return mixed*/public function getMessage (){return $this->_message;}/**** @return mixed*/public function getData (){return $this->_data;}/**** @param mixed $_code*/public function setCode ($_code){$this->_code = $_code;}/**** @param mixed $_message*/public function setMessage ($_message){$this->_message = $_message;}/**** @param mixed $_data*/public function setData ($_data){$this->_data = $_data;}public static function newInstance ($json = ''){$decode = [];if(! empty($json)){if(is_string($json)){$decode = json_decode($json, true);if(empty($decode) || ! is_array($decode)){throw new Exception('数据格式错误');}}}$result = new Result($decode);return $result;}// 是否成功// 100000 为成功public function isSuccess(){return $this->$_code == 100000;}public function __toString (){return json_encode(['code' => $this->getCode(),'message' => $this->getMessage(),'data' => $this->getData()]);}}
使用
<?php// 从json数据进行解析到 Result$json = <<<JSON{"code":100000,"message":"获取成功","data":[{"time":"2020-01-01 11:00:00","log":"已接单"}]}JSON;$result = Result::newInstance($json);var_dump($result->code, $result->message, $result->data, $result->isSuccess());
