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数组对比函数,存在交集则返回真,否则返回假
Feb 03 PHP
解决ajax+php中文乱码的方法详解
Jun 09 PHP
PHP错误WARNING: SESSION_START() [FUNCTION.SESSION-START]解决方法
May 04 PHP
初识php MVC
Sep 10 PHP
PHP合并数组的2种方法小结
Nov 24 PHP
PHP中CheckBox多选框上传失败的代码写法
Feb 13 PHP
cakephp2.X多表联合查询join及使用分页查询的方法
Feb 23 PHP
Yii2设置默认控制器的两种方法
May 19 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
Feb 23 PHP
PHP基于PDO扩展操作mysql数据库示例
Dec 24 PHP
PHP常见的几种攻击方式实例小结
Apr 29 PHP
PHP实现倒计时功能
Nov 16 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截取指定2个字符之间字符串的方法
2015/04/15 PHP
Zend Framework动作助手(Zend_Controller_Action_Helper)用法详解
2016/03/05 PHP
PHP去除空数组且数组键名重置的讲解
2019/02/28 PHP
对laravel in 查询的使用方法详解
2019/10/09 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
JS实现选中当前菜单后高亮显示的导航条效果
2015/10/15 Javascript
AngularJs表单验证实例代码解析
2016/11/29 Javascript
javascript十六进制数字和ASCII字符之间的转换方法
2016/12/27 Javascript
es6的数字处理的方法(5个)
2017/03/16 Javascript
selenium 与 chrome 进行qq登录并发邮件操作实例详解
2017/04/06 Javascript
用原生JS实现简单的多选框功能
2017/06/12 Javascript
JavaScript中常见的八个陷阱总结
2017/06/28 Javascript
vuejs手把手教你写一个完整的购物车实例代码
2017/07/06 Javascript
JSON对象转化为字符串详解
2017/08/11 Javascript
微信小程序删除处理详解
2017/08/16 Javascript
原生JS实现列表子元素顺序反转的方法分析
2018/07/02 Javascript
swiper在angularjs中使用循环轮播失效的解决方法
2018/09/27 Javascript
NodeJS使用Range请求实现下载功能的方法示例
2018/10/12 NodeJs
在vue中使用axios实现post方式获取二进制流下载文件(实例代码)
2019/12/16 Javascript
vue vant中picker组件的使用
2020/11/03 Javascript
vue+elementUI动态增加表单项并添加验证的代码详解
2020/12/17 Vue.js
python用户管理系统的实例讲解
2017/12/23 Python
Python 通配符删除文件的实例
2018/04/24 Python
在python3中pyqt5和mayavi不兼容问题的解决方法
2019/01/08 Python
PyQt5 QTable插入图片并动态更新的实例
2019/06/18 Python
Python程序打包工具py2exe和PyInstaller详解
2019/06/28 Python
Python读写压缩文件的方法
2020/07/30 Python
工商管理实习生自我鉴定范文
2013/12/18 职场文书
元宵节晚会主持人串词
2014/03/25 职场文书
简历自我评价优缺点
2015/03/11 职场文书
二婚主持词
2015/06/30 职场文书
学校学期工作总结
2015/08/13 职场文书
新年寄语2016
2015/08/17 职场文书
公司会议开幕词
2016/03/03 职场文书
四年级作文之说明文作文
2019/10/14 职场文书
Django 如何实现文件上传下载
2021/04/08 Python