当前位置:Gxlcms > PHP教程 > 关于php返回数据格式化类的详解

关于php返回数据格式化类的详解

时间:2021-07-01 10:21:17 帮助过:23人阅读

DataReturn.class.php

  1. <?php
  2. /** 返回數據格式化類
  3. *
  4. Date:
  5. 2011-08-15
  6. *
  7. Author:
  8. fdipzone
  9. */
  10. class DataReturn{
  11. // class start
  12. private $type;
  13. private $xmlroot;
  14. private $callback;
  15. private $returnData;
  16. public function __construct($param=array()){
  17. $this->type = $this->exists($param,'type')? strtoupper($param['type']) : 'JSON';
  18. // 類型 JSON,XML,CALLBACK,ARRAY
  19. $this->xmlroot = $this->exists($param,'xmlroot')? $param['xmlroot'] : 'xmlroot';
  20. // xml root dom name
  21. $this->callback = $this->exists($param,'callback')? $param['callback'] : '';
  22. // JS callback function name
  23. $format = array();
  24. $format['retcode'] = $this->exists($param,'format.retcode')? $param['format']['retcode'] : 'retcode';//retcode 對應名稱
  25. $format['msg'] = $this->exists($param,'format.msg')? $param['format']['msg'] : 'msg'; //msg 對應名稱
  26. $format['data'] = $this->exists($param,'format.data')? $param['format']['data'] : 'data'; //data 對應名稱
  27. $result = array();
  28. $result[$format['retcode']] = $this->exists($param,'retcode')? $param['retcode'] : 0;
  29. $result[$format['msg']] = $this->exists($param,'msg')? $param['msg'] : '';
  30. $result[$format['data']] = $this->exists($param,'data')? $param['data'] : '';
  31. $this->returnData = $result;
  32. }
  33. //輸出數據
  34. public function data_return(){
  35. ob_clean();
  36. switch($this->type){
  37. case 'JSON':
  38. $this->json_return();
  39. break;
  40. case 'XML':
  41. $this->xml_return();
  42. break;
  43. case 'CALLBACK':
  44. $this->callback_return();
  45. break;
  46. case 'ARRAY':
  47. $this->array_return();
  48. break;
  49. default:
  50. $this->json_return();
  51. }
  52. exit();
  53. }
  54. //輸出JSON格式數據,如有callback參數則返回JSONP格式
  55. private function json_return(){
  56. header('content-type:text/html;charset=utf-8');
  57. if(empty($this->callback)){
  58. echo json_encode($this->returnData);
  59. }else{
  60. echo $this->callback.'('.json_encode($this->returnData).');';
  61. }
  62. }
  63. //輸出XML格式數據
  64. private function xml_return(){
  65. header('content-type:text/xml;charset=utf-8');
  66. echo $this->xml_encode($this->returnData,$this->xmlroot);
  67. }
  68. //輸出JSON格式數據,并調用callback方法
  69. private function callback_return(){
  70. header('content-type:text/html;charset=utf-8');
  71. $this->callback = empty($this->callback)? 'callback' : $this->callback;
  72. echo "<script type=\"text/javascript\">\r\n";
  73. echo $this->callback."(".json_encode($this->returnData).");\r\n";
  74. echo "</script>";
  75. }
  76. //輸出數組格式數據
  77. private function array_return(){
  78. header('content-type:text/html;charset=utf-8');
  79. echo '<pre>';
  80. print_r($this->returnData);
  81. echo '</pre>';
  82. }
  83. //XML編碼
  84. private function xml_encode($data, $root='xmlroot', $encoding='utf-8') {
  85. $xml = "<?xml version=\"1.0\" encoding=\"" . $encoding . "\"?>\n";
  86. $xml.= "<" . $root . ">\n";
  87. $xml.= $this->data_to_xml($data);
  88. $xml.= "</" . $root . ">";
  89. return $xml;
  90. }
  91. //數組轉XML格式
  92. private function data_to_xml($data) {
  93. if (is_object($data)) {
  94. $data = get_object_vars($data);
  95. }
  96. $xml = '';
  97. foreach ($data as $key => $val) {
  98. is_numeric($key) && $key = "item id=\"$key\"";
  99. $xml.="<$key>";
  100. $xml.= ( is_array($val) || is_object($val)) ? $this->data_to_xml($val) : $this->cdata($val);
  101. list($key, ) = explode(' ', $key);
  102. $xml.="</$key>\n";
  103. }
  104. return $xml;
  105. }
  106. //判斷數據是否存在
  107. private function exists($obj,$key=''){
  108. if($key==''){
  109. return isset($obj) && !empty($obj);
  110. }else{
  111. $keys = explode('.',$key);
  112. for($i=0,$max=count($keys); $i<$max; $i++){
  113. if(isset($obj[$keys[$i]])){
  114. $obj = $obj[$keys[$i]];
  115. }else{
  116. return false;
  117. }
  118. }
  119. return isset($obj) && !empty($obj);
  120. }
  121. }
  122. //判斷是否需要加上<![CDATA[]]>標記
  123. private function cdata($val){
  124. if(!empty($val) && !preg_match('/^[A-Za-z0-9+$]/',$val)){
  125. $val = '<![CDATA['.$val.']]>';
  126. }
  127. return $val;
  128. }
  129. }
  130. // class end
  131. ?>

demo

  1. <?
  2. require_once('DataReturn.class.php');
  3. $param = array( // DataReturn 參數
  4. 'type' => 'JSON', // 輸出的類型 JSON,XML,CALLBACK,ARRAY 默認為 JSON
  5. 'retcode' => '1000', // retcode 的值,默認為0
  6. 'msg' => '', // msg 的值,默認為空
  7. 'data' => array( // 要輸出的數據
  8. 'id' => '100',
  9. 'name' => 'fdipzone',
  10. 'gender' => 1,
  11. 'age' => 28
  12. ),
  13. 'format' => array(// 輸出的數據key格式,默認為 retcode,msg,data
  14. 'retcode' => 'status',
  15. 'msg' => 'info',
  16. 'data' => 'result'
  17. ),
  18. 'xmlroot' => 'xmlroot', // 當type=XML時,XML根節點名稱,默認為xmlroot
  19. 'callback' => 'callback' /* 回調方法名稱
  20. type=JSON時,默認為空,如不為空,則輸出callback({data});
  21. type=CALLBACK時,默認為callback,自動調用頁面JS回調方法
  22. */
  23. );
  24. $obj = new DataReturn($param); // 創建DataReturn類對象
  25. $obj->data_return(); // 按格式輸出數據
  26. ?>

本文讲解了php返回数据格式化类,更多相关内容请关注Gxl网。

相关推荐:

关于php XML文件解释类的讲解

php CSS Update Class的相关内容讲解

关于php __call 与 __callStatic 的内容讲解

以上就是关于php返回数据格式化类的详解的详细内容,更多请关注Gxl网其它相关文章!

人气教程排行