接上篇 http://my.oschina.net/woshixiaomayi/blog/516871
在类文件中包含了json返回数据的方法和xml返回数据的方法,在调用的时候需要调用不同的方法来实现不同类型数据的返回,今天再增加一个show()方法,作为一个统一调用的入口,只需要给它传入不同的参数就可以实现不同类型的数据返回了,比较方便。
<?php class Response{ //设置一个常量作为类型的一个默认值 const TYPE=‘json‘; /*********************************** * 统一调用入口,$type参数为调用的类型,可以是json、xml、array打印数组使用等 * $param integer $code 状态码 * $param string $message 提示消息 * $param array $data 具体数据 * $param string $type 返回类型 * return mixed 根据类型返回 * ******************************/ public static function show($code,$message=‘‘,$data=array(),$type=self::TYPE){ //做出一个验证,如果不是数字,就返回空 if(!is_numeric($code)){ return ‘‘; } //把传送进来的三个值,组装成一个数组 $result = array( ‘code‘ => $code, ‘message‘ => $message, ‘data‘ => $data ); //这一步的设计目的:可以通过地址栏get传参的方式从外部获取数据,非常灵活 $type = isset($_GET[‘showtype‘])?$_GET[‘showtype‘]:$type; switch ($type) { case ‘json‘: //如果是json,则返回json数据 self::json($code,$message,$data); break; case ‘xml‘: //如果是xml,这返回xml数据 self::xml($code,$message,$data); break; case ‘array‘: //如果传进来的值是array,这打印出这个数组 var_dump($result); break; default: #根据需要,处理业务逻辑 echo ‘不能识别信息‘; break; } } /*********************************** * 返回json格式数据 * $param integer $code * $param string $message * $param array $data * return json * ******************************/ public static function json($code,$message=‘‘,$data=array()){ //做出一个验证,如果不是数字,就返回空 if(!is_numeric($code)){ return ‘‘; } //把穿进来的三个值,组装成一个数组 $result = array( ‘code‘ => $code, ‘message‘ => $message, ‘data‘ => $data ); //json_encode()把数组转化成json格式输出 echo json_encode($result); exit; } /*********************************** * 返回xml格式数据 * $param integer $code * $param string $message * $param array $data * return json * ******************************/ public static function xml($code,$message=‘‘,$data=array()){ //做出一个验证,如果不是数字,就返回空 if(!is_numeric($code)){ return ‘‘; } //把穿进来的三个值,组装成一个数组 $result = array( ‘code‘ => $code, ‘message‘ => $message, ‘data‘ => $data ); //便于浏览器输出xml格式文件 header(‘content-type:text/xml‘); //拼接xml $xml.="<?xml version=‘1.0‘ encoding=‘UTF-8‘ ?>"; $xml.=‘<root>‘; $xml.=self::xmlToEncode($result); //获取组装好的xml数据 $xml.=‘</root>‘; echo $xml; exit; } public static function xmlToEncode($arr){ //准备一个接收的空数组 $xml=‘‘; //将这个数组的键,作为节点名称,值作为内容 foreach ($arr as $key => $value) { /*约定一个规则,如果键是数字的话,格式为<item id=‘5‘>aaa</item>*/ if(is_numeric($key)){ $attr = " id=‘{$key}‘";//属性的值需要带上引号,不然报错 $key = ‘item‘; } $xml.="<{$key}{$attr}>"; //如果$value的值是个多维数组的话,需要递归遍历 $xml.=is_array($value) ? self::xmlToEncode($value) : $value; $xml.="</{$key}>"; } return $xml; } } $array=array( ‘name‘=>‘学PHP的小蚂蚁‘, ‘age‘=>‘27‘, ‘sex‘=>‘male‘, ‘url‘=>‘博客 http://my.oschina.net/woshixiaomayi/blog‘, ‘like‘=>array( ‘eat‘=>‘apple‘, ‘drink‘=>‘milk‘, ‘happy‘, ‘lucky‘ ) ); Response::show(200,‘success‘,$array,‘array‘); /* 打印出来的样子 <root> <code>200</code> <message>success</message> <data> <name>学PHP的小蚂蚁</name> <age>27</age> <sex>male</sex> <url>http:博客 //my.oschina.net/woshixiaomayi/blog</url> <like> <eat>apple</eat> <drink>milk</drink> <item id="0">happy</item> <item id="1">lucky</item> </like> </data> </root> */ ?>
封装数据通信接口的方法基本上就是这个样子了,道理还是挺简单的。
小蚂蚁学习APP接口开发(3)—— 统一调用入口方式封装通信接口
原文:http://my.oschina.net/woshixiaomayi/blog/517384