当前位置:首页 > PHP教程 > php应用 > 列表

php实现的返回数据格式化类实例

发布:smiling 来源: PHP粉丝网  添加日期:2021-04-14 10:32:26 浏览: 评论:0 

这篇文章主要介绍了php实现的返回数据格式化类及其应用实例,包括针对XML、JSON等的格式化,非常具有实用价值,需要的朋友可以参考下

本文实例讲述了php实现的返回数据格式化类及其用法,在字符串处理中非常具有实用价值。分享给大家供大家参考。具体方法如下:

DataReturn.class.php类文件如下:

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

demo示例程序如下:

  1. <?php  
  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程序设计的学习有所帮助。

Tags: php数据格式化

分享到: