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


Posted in PHP onSeptember 22, 2014

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

DataReturn.class.php类文件如下:

<?php 
/** 返回数据格式化类 
*  Date:  2011-08-15 
*  Author: fdipzone 
*/ 
 
class DataReturn{  // class start 
 
  private $type; 
  private $xmlroot; 
  private $callback; 
  private $returnData; 
 
  public function __construct($param=array()){ 
    $this->type = $this->exists($param,'type')? strtoupper($param['type']) : 'JSON';   // 类型 JSON,XML,CALLBACK,ARRAY 
    $this->xmlroot = $this->exists($param,'xmlroot')? $param['xmlroot'] : 'xmlroot';   // xml root dom name 
    $this->callback = $this->exists($param,'callback')? $param['callback'] : '';     // JS callback function name 
 
    $format = array(); 
    $format['retcode'] = $this->exists($param,'format.retcode')? $param['format']['retcode'] : 'retcode';//retcode 对应名称 
    $format['msg'] = $this->exists($param,'format.msg')? $param['format']['msg'] : 'msg';        //msg 对应名称 
    $format['data'] = $this->exists($param,'format.data')? $param['format']['data'] : 'data';      //data 对应名称 
 
    $result = array(); 
    $result[$format['retcode']] = $this->exists($param,'retcode')? $param['retcode'] : 0; 
    $result[$format['msg']] = $this->exists($param,'msg')? $param['msg'] : ''; 
    $result[$format['data']] = $this->exists($param,'data')? $param['data'] : ''; 
 
    $this->returnData = $result; 
  } 
 
  //输出数据 
  public function data_return(){ 
    ob_clean(); 
    switch($this->type){ 
      case 'JSON': 
        $this->json_return(); 
        break; 
      case 'XML': 
        $this->xml_return(); 
        break; 
      case 'CALLBACK': 
        $this->callback_return(); 
        break; 
      case 'ARRAY': 
        $this->array_return(); 
        break; 
      default: 
        $this->json_return(); 
    } 
    exit(); 
  } 
 
  //输出JSON格式数据,如有callback参数则返回JSONP格式 
  private function json_return(){ 
    header('content-type:text/html;charset=utf-8'); 
    if(empty($this->callback)){ 
      echo json_encode($this->returnData); 
    }else{ 
      echo $this->callback.'('.json_encode($this->returnData).');'; 
    } 
  } 
 
  //输出XML格式数据 
  private function xml_return(){ 
    header('content-type:text/xml;charset=utf-8'); 
    echo $this->xml_encode($this->returnData,$this->xmlroot); 
  } 
 
  //输出JSON格式数据,并调用callback方法 
  private function callback_return(){ 
    header('content-type:text/html;charset=utf-8'); 
    $this->callback = empty($this->callback)? 'callback' : $this->callback; 
    echo "<script type=\"text/javascript\">\r\n"; 
    echo $this->callback."(".json_encode($this->returnData).");\r\n"; 
    echo "</script>"; 
  } 
 
  //输出数组格式数据 
  private function array_return(){ 
    header('content-type:text/html;charset=utf-8'); 
    echo '<pre>'; 
    print_r($this->returnData); 
    echo '</pre>'; 
  } 
 
  //XML编码 
  private function xml_encode($data, $root='xmlroot', $encoding='utf-8') { 
    $xml = "<?xml version=\"1.0\" encoding=\"" . $encoding . "\"?>\n"; 
    $xml.= "<" . $root . ">\n"; 
    $xml.= $this->data_to_xml($data); 
    $xml.= "</" . $root . ">"; 
    return $xml; 
  } 
 
  //数组转XML格式 
  private function data_to_xml($data) { 
    if (is_object($data)) { 
      $data = get_object_vars($data); 
    } 
    $xml = ''; 
    foreach ($data as $key => $val) { 
      is_numeric($key) && $key = "item id=\"$key\""; 
      $xml.="<$key>"; 
      $xml.= ( is_array($val) || is_object($val)) ? $this->data_to_xml($val) : $this->cdata($val); 
      list($key, ) = explode(' ', $key); 
      $xml.="</$key>\n"; 
    } 
    return $xml; 
  } 
 
  //判断数据是否存在 
  private function exists($obj,$key=''){ 
    if($key==''){ 
      return isset($obj) && !empty($obj); 
    }else{ 
      $keys = explode('.',$key); 
      for($i=0,$max=count($keys); $i<$max; $i++){ 
        if(isset($obj[$keys[$i]])){ 
          $obj = $obj[$keys[$i]]; 
        }else{ 
          return false; 
        } 
      } 
      return isset($obj) && !empty($obj); 
    } 
  } 
 
  //判断是否需要加上<![CDATA[]]>标记 
  private function cdata($val){ 
    if(!empty($val) && !preg_match('/^[A-Za-z0-9+$]/',$val)){ 
      $val = '<![CDATA['.$val.']]>'; 
    } 
    return $val; 
  } 
}  // class end 
?>

demo示例程序如下:

<?php 
  require_once('DataReturn.class.php'); 
  $param = array( // DataReturn 参数 
          'type'  => 'JSON', // 输出的类型 JSON,XML,CALLBACK,ARRAY 默认为 JSON 
          'retcode' => '1000', // retcode 的值,默认为0 
          'msg'   => '',   // msg 的值,默认为空 
          'data'  => array( // 要输出的数据 
                  'id'   => '100', 
                  'name'  => 'fdipzone', 
                  'gender' => 1, 
                  'age'  => 28 
                 ), 
          'format' => array( // 输出的数据key格式,默认为 retcode,msg,data 
                  'retcode' => 'status', 
                  'msg'   => 'info', 
                  'data'  => 'result' 
                 ), 
          'xmlroot' => 'xmlroot', // 当type=XML时,XML根节点名称,默认为xmlroot 
          'callback' => 'callback' /* 回调方法名称 
                          type=JSON时,默认为空,如不为空,则输出callback({data}); 
                          type=CALLBACK时,默认为callback,自动调用页面JS回调方法 
                       */ 
  ); 
  $obj = new DataReturn($param); // 创建DataReturn类对象 
  $obj->data_return();      // 按格式输出数据 
?>

希望本文所述对大家php程序设计的学习有所帮助。

PHP 相关文章推荐
推荐Discuz!5的PHP代码高亮显示与实现可运行代码
Mar 15 PHP
PHP中spl_autoload_register函数的用法总结
Nov 07 PHP
用Zend Studio+PHPnow+Zend Debugger搭建PHP服务器调试环境步骤
Jan 19 PHP
php解析url的三个示例
Jan 20 PHP
PHP中对于浮点型的数据需要用不同的方法解决
Mar 11 PHP
对于ThinkPHP框架早期版本的一个SQL注入漏洞详细分析
Jul 04 PHP
ThinkPHP中RBAC类的四种用法分析
Nov 24 PHP
thinkphp中空模板与空模块的用法实例
Nov 26 PHP
PHP输出九九乘法表代码实例
Mar 27 PHP
php防止用户重复提交表单
Nov 02 PHP
thinkPHP5.0框架URL访问方法详解
Mar 18 PHP
PHP生成随机数的方法总结
Mar 01 PHP
php实现的替换敏感字符串类实例
Sep 22 #PHP
php实现的发送带附件邮件类实例
Sep 22 #PHP
PHP实现AES256加密算法实例
Sep 22 #PHP
php生成QRcode实例
Sep 22 #PHP
php实现的Captcha验证码类实例
Sep 22 #PHP
php中unserialize返回false的解决方法
Sep 22 #PHP
php实现根据字符串生成对应数组的方法
Sep 22 #PHP
You might like
Smarty结合Ajax实现无刷新留言本实例
2007/01/02 PHP
深入解析PHP的引用计数机制
2013/06/14 PHP
destoon公司主页模板风格的添加方法
2014/06/20 PHP
详解WordPress中的头像缓存和代理中的缓存更新方法
2016/03/01 PHP
PHP编写的图片验证码类文件分享
2016/06/06 PHP
如何运行/调试你的PHP代码
2020/10/23 PHP
JavaScript中链式调用之研习
2011/04/07 Javascript
最常用的12种设计模式小结
2011/08/09 Javascript
node+express+ejs制作简单页面上手指南
2014/11/26 Javascript
JS折半插入排序算法实例
2015/12/02 Javascript
基于JavaScript实现多级菜单效果
2017/07/25 Javascript
JS开发中基本数据类型具体有哪几种
2017/10/19 Javascript
如何在Vue.js中实现标签页组件详解
2019/01/02 Javascript
JavaScript实现Tab标签页切换的最简便方式(4种)
2020/06/28 Javascript
深入理解javascript中的this
2021/02/08 Javascript
[02:45]DOTA2英雄基础教程 伐木机
2013/12/23 DOTA
[02:16]2018年度CS GO最具人气选手-完美盛典
2018/12/16 DOTA
python实现简单socket通信的方法
2016/04/19 Python
Python程序中设置HTTP代理
2016/11/06 Python
Django跨域请求问题的解决方法示例
2018/06/16 Python
python实现猜数字小游戏
2020/03/24 Python
PyQt5图形界面播放音乐的实例
2019/06/17 Python
python中对数据进行各种排序的方法
2019/07/02 Python
python3.6编写的单元测试示例
2019/08/17 Python
python连接PostgreSQL数据库的过程详解
2019/09/18 Python
python 检查数据中是否有缺失值,删除缺失值的方式
2019/12/02 Python
Python监控服务器实用工具psutil使用解析
2019/12/19 Python
Python 限定函数参数的类型及默认值方式
2019/12/24 Python
Django3中的自定义用户模型实例详解
2020/08/23 Python
军训学生自我鉴定
2014/02/12 职场文书
党委领导班子整改方案
2014/09/30 职场文书
查摆问题整改措施
2014/10/24 职场文书
学期个人自我总结
2015/02/13 职场文书
2015年毕业生实习评语
2015/03/25 职场文书
Python使用psutil库对系统数据进行采集监控的方法
2021/08/23 Python