在类文件中包含了json返回数据的方法和xml返回数据的方法,在调用的时候需要调用不同的方法来实现不同类型数据的返回,今天再增加一个show()方法,作为一个统一调用的入口,只需要给它传入不同的参数就可以实现不同类型的数据返回了,比较方便。
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.='';
$xml.=self::xmlToEncode($result);//获取组装好的xml数据
$xml.='';
echo $xml;
exit;
}
public static function xmlToEncode($arr){
//准备一个接收的空数组
$xml='';
//将这个数组的键,作为节点名称,值作为内容
foreach ($arr as $key => $value) {
/*约定一个规则,如果键是数字的话,格式为aaa*/
if(is_numeric($key)){
$attr=" id='{$key}'";//属性的值需要带上引号,不然报错
$key='item';
}
$xml.="";
//如果$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');
/*
打印出来的样子
200
success
学PHP的小蚂蚁
27
male
http:博客 //my.oschina.net/woshixiaomayi/blog
apple
milk
happy
lucky
*/
?>
封装数据通信接口的方法基本上就是这个样子了,道理还是挺简单的。