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执行速率优化技巧小结
Mar 15 PHP
Uchome1.2 1.5 代码学习 common.php
Apr 24 PHP
PHP 裁剪图片成固定大小代码方法
Sep 09 PHP
3款值得推荐的微信开发开源框架
Oct 28 PHP
PHP读取txt文本文件并分页显示的方法
Mar 11 PHP
php实现点击可刷新验证码
Nov 07 PHP
php字符串的替换,分割和连接方法
May 23 PHP
Zend Framework基于Command命令行建立ZF项目的方法
Feb 18 PHP
iis6手工创建网站后无法运行php脚本的解决方法
Jun 08 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
Aug 10 PHP
Laravel下生成验证码的类
Nov 15 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
Apr 04 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
Protoss兵种对照表
2020/03/14 星际争霸
PHP高级对象构建 工厂模式的使用
2012/02/05 PHP
php插入中文到sqlserver 2008里出现乱码的解决办法分享
2012/07/19 PHP
php xml常用函数的集合(比较详细)
2013/06/06 PHP
Zend Framework框架实现类似Google搜索分页效果
2016/11/25 PHP
一个很简单的jquery+xml+ajax的无刷新树结构(无css,后台是c#)
2010/06/02 Javascript
jquery slibings选取同级其他元素的实现代码
2013/11/15 Javascript
js AppendChild与insertBefore用法详细对比
2013/12/16 Javascript
jquery ajax,ashx,json的用法总结
2014/02/12 Javascript
jQuery插件EnPlaceholder实现输入框提示文字
2015/06/05 Javascript
js格式化输入框内金额、银行卡号
2016/02/01 Javascript
require、backbone等重构手机图片查看器
2016/11/17 Javascript
详解vue-cli构建项目反向代理配置
2017/09/07 Javascript
Popup弹出框添加数据实现方法
2017/10/27 Javascript
vue使用vue-i18n实现国际化的实现代码
2018/04/08 Javascript
Vue中的methods、watch、computed的区别
2018/11/26 Javascript
VUE Elemen-ui之穿梭框使用方法详解
2021/01/19 Javascript
如何搭建一个完整的Vue3.0+ts的项目步骤
2020/10/18 Javascript
Python中使用logging模块代替print(logging简明指南)
2014/07/09 Python
Python实现把utf-8格式的文件转换成gbk格式的文件
2015/01/22 Python
Python简单删除列表中相同元素的方法示例
2017/06/12 Python
python DataFrame 修改列的顺序实例
2018/04/10 Python
python 每天如何定时启动爬虫任务(实现方法分享)
2018/05/21 Python
Python Logging 日志记录入门学习
2018/06/02 Python
python的turtle库使用详解
2019/05/10 Python
python/Matplotlib绘制复变函数图像教程
2019/11/21 Python
Python+Selenium+phantomjs实现网页模拟登录和截图功能(windows环境)
2019/12/11 Python
tensorflow 初始化未初始化的变量实例
2020/02/06 Python
canvas实现扭蛋机动画效果的示例代码
2018/10/17 HTML / CSS
自我评价怎么写正确呢?
2013/12/02 职场文书
企业内控岗位的职责
2014/02/07 职场文书
发展部经理职责规定
2014/02/22 职场文书
2014年机关植树节活动方案
2014/02/27 职场文书
倡议书范文格式
2014/05/12 职场文书
2014年采购工作总结
2014/11/20 职场文书
2016教师年度考核评语大全
2015/12/01 职场文书