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 相关文章推荐
在线短消息收发的程序,不用数据库
Oct 09 PHP
一个简单的域名注册情况查询程序
Oct 09 PHP
php 文章采集正则代码
Dec 28 PHP
按上下级层次关系输出内容的PHP代码
Jul 17 PHP
php短域名转换为实际域名函数
Jan 17 PHP
php实现改变图片直接打开为下载的方法
Apr 14 PHP
PHP基于phpqrcode生成带LOGO图像的二维码实例
Jul 10 PHP
3种php生成唯一id的方法
Nov 23 PHP
yii2.0使用Plupload实现带缩放功能的多图上传
Dec 22 PHP
ThinkPHP表单令牌错误的相关解决方法分析
May 20 PHP
PHP递归删除多维数组中的某个值
Apr 17 PHP
PHP使用 Pear 进行安装和卸载包的方法详解
Jul 08 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
?生?D片??C字串
2006/12/06 PHP
从PHP $_SERVER相关参数判断是否支持Rewrite模块
2013/09/26 PHP
解密ThinkPHP3.1.2版本之独立分组功能应用
2014/06/19 PHP
PHP代码重构方法漫谈
2018/04/17 PHP
php给数组赋值的实例方法
2019/09/26 PHP
jquery 插件 web2.0分格的分页脚本,可用于ajax无刷新分页
2008/12/25 Javascript
js parentElement和offsetParent之间的区别
2010/03/23 Javascript
Ext对基本类型的扩展 ext,extjs,format
2010/12/25 Javascript
jquery 笔记 事件
2011/11/02 Javascript
jQuery中Dom的基本操作小结
2014/01/23 Javascript
JavaScript sup方法入门实例(把字符串显示为上标)
2014/10/20 Javascript
在jQuery中处理XML数据的大致方法
2015/08/14 Javascript
JS实现简单的二维矩阵乘积运算
2016/01/26 Javascript
基于daterangepicker日历插件使用参数注意的问题
2017/08/10 Javascript
聊聊JS动画库 Velocity.js的使用
2018/03/13 Javascript
vue-router beforeEach跳转路由验证用户登录状态
2018/12/26 Javascript
koa+jwt实现token验证与刷新功能
2019/05/30 Javascript
浅入深出Vue之组件使用
2019/07/11 Javascript
Json实现传值到后台代码实例
2020/06/30 Javascript
Python(Tornado)模拟登录小米抢手机
2013/11/12 Python
pycham查看程序执行的时间方法
2018/11/29 Python
Python替换月份为英文缩写的实现方法
2019/07/15 Python
PyCharm如何导入python项目的方法
2020/02/06 Python
Python解释器及PyCharm工具安装过程
2020/02/26 Python
Python实现仿射密码的思路详解
2020/04/23 Python
python对批量WAV音频进行等长分割的方法实现
2020/09/25 Python
Canvas波浪花环的示例代码
2020/08/21 HTML / CSS
美国网上书店:Barnes & Noble
2018/08/15 全球购物
表决心的诗句大全
2014/03/11 职场文书
协议书范文
2015/01/27 职场文书
出国导师推荐信
2015/03/25 职场文书
《七律·长征》教学反思
2016/02/16 职场文书
解决Golang time.Parse和time.Format的时区问题
2021/04/29 Golang
Java如何实现树的同构?
2021/06/22 Java/Android
CSS实现两列布局的N种方法
2021/08/02 HTML / CSS
Python自动化工具之实现Excel转Markdown表格
2022/04/08 Python