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 相关文章推荐
php批量删除数据
Jan 18 PHP
php REMOTE_ADDR之获取访客IP的代码
Apr 22 PHP
PHP 处理TXT文件(打开/关闭/检查/读取)
May 13 PHP
PHP在网页中动态生成PDF文件详细教程
Jul 05 PHP
PHP中模拟处理HTTP PUT请求的例子
Jul 22 PHP
QQ互联一键登录审核不通过的解决方案
Sep 10 PHP
PHP中应该避免使用同名变量(拆分临时变量)
Apr 03 PHP
给WordPress中的留言加上楼层号的PHP代码实例
Dec 14 PHP
PHP实现的通过参数生成MYSQL语句类完整实例
Apr 11 PHP
php数据库的增删改查 php与javascript之间的交互
Aug 31 PHP
PHP观察者模式实例分析【对比JS观察者模式】
May 22 PHP
laravel添加角色和模糊搜索功能的实现代码
Jun 22 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
php示例详解Constructor Prototype Pattern 原型模式
2015/10/15 PHP
关于PHP内置的字符串处理函数详解
2017/02/04 PHP
js监听滚动条滚动事件使得某个标签内容始终位于同一位置
2014/01/24 Javascript
jquery实现点击消失的代码
2014/03/03 Javascript
jquery实现侧边弹出的垂直导航
2014/12/09 Javascript
javascript解三阶幻方(九宫格)
2015/04/22 Javascript
Angular.js与Bootstrap相结合实现表格分页代码
2016/04/12 Javascript
vue.js指令v-model实现方法
2016/12/05 Javascript
解析Javascript单例模式概念与实例
2016/12/05 Javascript
原生js实现手风琴功能(支持横纵向调用)
2017/01/13 Javascript
最常用的jQuery表单验证(简单)
2017/05/23 jQuery
Angular2.js实现表单验证详解
2017/06/23 Javascript
使用JS实现导航切换时高亮显示的示例讲解
2018/08/22 Javascript
vue里input根据value改变背景色的实例
2018/09/29 Javascript
Vue CLI3.0中使用jQuery和Bootstrap的方法
2019/02/28 jQuery
小程序封装wx.request请求并创建接口管理文件的实现
2019/04/29 Javascript
文章或博客自动生成章节目录索引(支持三级)的实现代码
2020/05/10 Javascript
Vue切换Tab动态渲染组件的操作
2020/09/21 Javascript
在Python中使用Neo4j数据库的教程
2015/04/16 Python
Django框架下在URLconf中指定视图缓存的方法
2015/07/23 Python
python爬虫实战之爬取京东商城实例教程
2017/04/24 Python
python实现人脸识别代码
2017/11/08 Python
Python生成短uuid的方法实例详解
2018/05/29 Python
pandas值替换方法
2018/07/10 Python
python读取txt文件并取其某一列数据的示例
2019/02/19 Python
python实现邮件发送功能
2019/08/10 Python
英国第一蛋白粉品牌:Myprotein
2016/09/14 全球购物
Bowflex美国官方网站:高级家庭健身器材
2017/12/22 全球购物
UNIONBAY官网:美国青少年服装品牌
2019/03/26 全球购物
理财投资建议书
2014/03/12 职场文书
求职信格式要求
2014/05/23 职场文书
村官个人总结范文
2015/03/03 职场文书
单位计划生育责任书
2015/05/09 职场文书
详解python的内存分配机制
2021/05/10 Python
P站美图推荐——变身女主角特辑
2022/03/20 日漫
详解OpenCV获取高动态范围(HDR)成像
2022/04/29 Python