在日常开发中,可能对接三方接口,比如根据根据快递单号查询快递跟踪的接口,其接口返回的值是固定的,比如

  1. {
  2. "code":100000,
  3. "message":"获取成功",
  4. "data":[
  5. {
  6. "time":"2020-01-01 11:00:00",
  7. "log":"已接单"
  8. },
  9. ......
  10. ]
  11. }

当获取到此数据的时候,可能利用 json_decode 解序后获取对应的数组数据,而后在进行逻辑判断,但是是不是感觉不是很优雅。

能否封装到一个对象中,然后想调用对象方法一样使用它,比如 $res->code 就可以直接获取到 100000。

那么如何优雅的使用,那么就涉及到了 BaseObject。

封装

  1. <?php
  2. namespace app\base;
  3. use yii\base\BaseObject;
  4. use Exception;
  5. class Result extends BaseObject
  6. {
  7. private $_code = 0;
  8. private $_message = '';
  9. private $_data = null;
  10. /**
  11. *
  12. * @return mixed
  13. */
  14. public function getCode ()
  15. {
  16. return $this->_code;
  17. }
  18. /**
  19. *
  20. * @return mixed
  21. */
  22. public function getMessage ()
  23. {
  24. return $this->_message;
  25. }
  26. /**
  27. *
  28. * @return mixed
  29. */
  30. public function getData ()
  31. {
  32. return $this->_data;
  33. }
  34. /**
  35. *
  36. * @param mixed $_code
  37. */
  38. public function setCode ($_code)
  39. {
  40. $this->_code = $_code;
  41. }
  42. /**
  43. *
  44. * @param mixed $_message
  45. */
  46. public function setMessage ($_message)
  47. {
  48. $this->_message = $_message;
  49. }
  50. /**
  51. *
  52. * @param mixed $_data
  53. */
  54. public function setData ($_data)
  55. {
  56. $this->_data = $_data;
  57. }
  58. public static function newInstance ($json = '')
  59. {
  60. $decode = [];
  61. if(! empty($json))
  62. {
  63. if(is_string($json))
  64. {
  65. $decode = json_decode($json, true);
  66. if(empty($decode) || ! is_array($decode))
  67. {
  68. throw new Exception('数据格式错误');
  69. }
  70. }
  71. }
  72. $result = new Result($decode);
  73. return $result;
  74. }
  75. // 是否成功
  76. // 100000 为成功
  77. public function isSuccess()
  78. {
  79. return $this->$_code == 100000;
  80. }
  81. public function __toString ()
  82. {
  83. return json_encode([
  84. 'code' => $this->getCode(),
  85. 'message' => $this->getMessage(),
  86. 'data' => $this->getData()
  87. ]);
  88. }
  89. }

使用

  1. <?php
  2. // json数据进行解析到 Result
  3. $json = <<<JSON
  4. {
  5. "code":100000,
  6. "message":"获取成功",
  7. "data":[
  8. {
  9. "time":"2020-01-01 11:00:00",
  10. "log":"已接单"
  11. }
  12. ]
  13. }
  14. JSON;
  15. $result = Result::newInstance($json);
  16. var_dump($result->code, $result->message, $result->data, $result->isSuccess());