PHP 开发 APP 接口 学习笔记与总结 - JSON 结合 XML 方式封装通信接口

返回Json格式 :

  const JSON = 'json';
    //封装的综合方法,默认的数据类型为json
    public static function show($code,$message = '',$data,$type = self::JSON){
        
        if(!is_numeric($code)){
            return '';
        }
        //供测试数组使用
        $result = array(
            'code' => $code,
            'message' => $message,
            'data' => $data
        );
        //通过get参数判断通信数据类型
        $typelist = array('json','xml','array'); // array为测试使用
        if(isset($_GET['type'])){
            if(in_array(strtolower($_GET['type']),$typelist)){
                $type = strtolower($_GET['type']);
            }else{
                $type = self::JSON;
            }
        }else{
            $type = self::JSON;
        }

        if($type == 'json'){
            self::json($code,$message = '',$data);
        }else if($type == 'xml'){
            self::xml($code,$message = '',$data);
        }else if($type == 'array'){
            var_dump($result);    //仅供测试
        }
    }

    /**
    * 按json方式输出通信数据
    * @param integer $code 状态码
    * @param string $message 提示信息
    * @param array $data 数据
    * return string
    */
    //设置静态方法
    public static function json($code,$message = '',$data = array()){
        if(!is_numeric($code)){
            return '';
        }
        //状态码、信息、数据组成的新数组
        $result = array(
            'code' => $code,
            'message' => $message,
            'data' => $data
        );

        echo json_encode($result);
        exit();
    }

返回XML格式:

 /**
    * 按 xml 方式输出通信数据
    * @param integer $code 状态码
    * @param string $message 提示信息
    * @param array $data 数据
    * return string
    */
    public static function xml($code,$message,$data){

        if(!is_numeric($code)){
            return '';
        }

        $result = array(
            'code' => $code,
            'message' => $message,
            'data' => $data
        );

        //修改 http 头信息
        header("Content-Type:text/xml");
        //xml头信息
        $xml = "<?xml version='1.0' encoding='utf-8'?>";
        //根节点开始标签
        $xml .= "<root>";

        $xml .= self::xmlToEncode($result);

        //根节点结束标签
        $xml .= "</root>";

        echo $xml;
        exit();
    }

    //解析$result至xml
    public static function xmlToEncode($data){
        $xml = $attr = "";
        foreach($data as $key=>$val){
            //如果$k是数字(data(code,message,data中的data)数据里面还含有索引数组),要进行如下判断
            if(is_numeric($key)){
                $attr = "id='{$key}'";
                $k = 'item ';
            }

            $xml .= "<{$key}{$attr}>";
            //如果$v是数组,则递归调用该方法
            if(is_array($val)){
                $xml .= self::xmlToEncode($val);
            }else{
                $xml .= $val;
            }
            $xml .= "</{$key}>";
        }

        return $xml;
    }
posted @ 2019-01-02 20:04  杨宇飞  阅读(174)  评论(0编辑  收藏  举报