接上篇 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>
*/
?>
封装数据通信接口的方法基本上就是这个样子了,道理还是挺简单的。