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>";
    }  

    //輸出數組格式數據
	// 查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/webkf/PHP/
    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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索callback
, function
, this
, data
, param
, callback(data)
format
,以便于您获取更多的相关知识。

时间: 2024-09-11 19:53:38

php类:返回数据格式化类的相关文章

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

 DataReturn.class.php类文件如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77

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

本文实例讲述了php实现的返回数据格式化类及其用法,在字符串处理中非常具有实用价值.分享给大家供大家参考.具体方法如下: DataReturn.class.php类文件如下: <?php /** 返回数据格式化类 * Date: 2011-08-15 * Author: fdipzone */ class DataReturn{ // class start private $type; private $xmlroot; private $callback; private $returnDa

Access 通用数据访问类(asp.net 2.0 c#)

access|asp.net|访问|数据 仿照以前收集的一个经典sql server数据访问类,稍做修改.using System;using System.Data;using System.Configuration;using System.Web;using System.Web.Security;using System.Web.UI;using System.Web.UI.WebControls;using System.Web.UI.WebControls.WebParts;usi

中小系统.net DataAccess数据访问类

access|访问|数据   #region 引用对象 using System;using System.Xml ;using System.Data;using System.Data.SqlClient;using System.Web; #endregionnamespace SysClassLibrary{ /// <summary> /// DataAccess 的摘要说明. /// <author>wuchen</author> /// <date&

ASP.NET 数据访问类

asp.net|访问|数据 using System;using System.Data;using System.Data.SqlClient; namespace SysClassLibrary{ /// <summary> /// DataAccess 的摘要说明. /// <description>数据处理基类,调用方式:DataAccess.DataSet((string)sqlstr);或者DataAccess.DataSet((string)sqlstr,ref Da

C++类静态数据成员与类静态成员函数

在没有讲述本章内容之前如果我们想要在一个范围内共享某一个数据,那么我们会设立全局对象,但面向对象的程序是由对象构成的,我们如何才能在类范围内共享数据呢? 这个问题便是本章的重点: 声明为static的类成员或者成员函数便能在类的范围内共同享,我们把这样的成员称做静态成员和静态成员函数. 下面我们用几个实例来说明这个问题,类的成员需要保护,通常情况下为了不违背类的封装特性,我们是把类成员设置为protected(保护状态)的,但是我们为了简化代码,使要说明的问题更为直观,更容易理解,我们在此处都设

DbHelper数据操作类,DbProviderFactories

  微软的企业库中有一个非常不错的数据操作类了.但是,不少公司(起码我遇到的几个...),对一些"封装"了些什么的东西不太敢用,虽然我推荐过微软的企业库框架了...但是还是要"评估"...一评就是几个月...而且,一些公司有的根本就是裸ado.net开发,或者自己封装的数据库操作类非常别扭,很不好用.      这里我给大家共享一个我参照企业库中的数据操作组件编码风格写的数据库操作类,对使用它的程序员来说,编码是很舒服滴(起码我觉得很好撒).以下是代码,很简单的,没

ios-实体类到另一个实体类传递数据

问题描述 实体类到另一个实体类传递数据 在chapterDC类中有一个selectedRegion,其中的区域数据需要传递到 regionDC.通过chapterDC来传递.chapterDC中有区域. 但是返回的结果不是0就是null. -(NSMutableArray *)getAllChapters{ NSMutableArray *returnArray = [[NSMutableArray alloc] init]; NSString *url = [NSString stringWi

wcf-WCF中数据契约类包含数组成员时客户端报错,怎么解决

问题描述 WCF中数据契约类包含数组成员时客户端报错,怎么解决 WCF中数据契约类包含数组成员时客户端报错,怎么办呢?这个声明为数据契约的类是当成返回值传给客户端的,当数组成员赋值为null的时候客户端能正确接收到数据,但是当给这个数组成员赋予一个数组时客户端就不能读取这个返回的数据了.有高手有类似经验吗?望不啬赐教啊,很急 解决方案 你的数组元素的类型是什么,你的详细报错信息是什么 参考https://social.microsoft.com/Forums/nl-NL/da8c4e56-0a5