php实现的返回数据格式化类实例
本文实例讲述了php实现的返回数据格式化类及其用法,在字符串处理中非常具有实用价值。分享给大家供大家参考。具体方法如下:
DataReturn.class.php类文件如下:
<?php
/**返回数据格式化类
*Date:2011-08-15
*Author:fdipzone
*/
classDataReturn{//classstart
private$type;
private$xmlroot;
private$callback;
private$returnData;
publicfunction__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';//xmlrootdomname
$this->callback=$this->exists($param,'callback')?$param['callback']:'';//JScallbackfunctionname
$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;
}
//输出数据
publicfunctiondata_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格式
privatefunctionjson_return(){
header('content-type:text/html;charset=utf-8');
if(empty($this->callback)){
echojson_encode($this->returnData);
}else{
echo$this->callback.'('.json_encode($this->returnData).');';
}
}
//输出XML格式数据
privatefunctionxml_return(){
header('content-type:text/xml;charset=utf-8');
echo$this->xml_encode($this->returnData,$this->xmlroot);
}
//输出JSON格式数据,并调用callback方法
privatefunctioncallback_return(){
header('content-type:text/html;charset=utf-8');
$this->callback=empty($this->callback)?'callback':$this->callback;
echo"<scripttype=\"text/javascript\">\r\n";
echo$this->callback."(".json_encode($this->returnData).");\r\n";
echo"</script>";
}
//输出数组格式数据
privatefunctionarray_return(){
header('content-type:text/html;charset=utf-8');
echo'<pre>';
print_r($this->returnData);
echo'</pre>';
}
//XML编码
privatefunctionxml_encode($data,$root='xmlroot',$encoding='utf-8'){
$xml="<?xmlversion=\"1.0\"encoding=\"".$encoding."\"?>\n";
$xml.="<".$root.">\n";
$xml.=$this->data_to_xml($data);
$xml.="</".$root.">";
return$xml;
}
//数组转XML格式
privatefunctiondata_to_xml($data){
if(is_object($data)){
$data=get_object_vars($data);
}
$xml='';
foreach($dataas$key=>$val){
is_numeric($key)&&$key="itemid=\"$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;
}
//判断数据是否存在
privatefunctionexists($obj,$key=''){
if($key==''){
returnisset($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{
returnfalse;
}
}
returnisset($obj)&&!empty($obj);
}
}
//判断是否需要加上<![CDATA[]]>标记
privatefunctioncdata($val){
if(!empty($val)&&!preg_match('/^[A-Za-z0-9+$]/',$val)){
$val='<![CDATA['.$val.']]>';
}
return$val;
}
}//classend
?>
demo示例程序如下:
<?php
require_once('DataReturn.class.php');
$param=array(//DataReturn参数
'type'=>'JSON',//输出的类型JSON,XML,CALLBACK,ARRAY默认为JSON
'retcode'=>'1000',//retcode的值,默认为0
'msg'=>'',//msg的值,默认为空
'data'=>array(//要输出的数据
'id'=>'100',
'name'=>'fdipzone',
'gender'=>1,
'age'=>28
),
'format'=>array(//输出的数据key格式,默认为retcode,msg,data
'retcode'=>'status',
'msg'=>'info',
'data'=>'result'
),
'xmlroot'=>'xmlroot',//当type=XML时,XML根节点名称,默认为xmlroot
'callback'=>'callback'/*回调方法名称
type=JSON时,默认为空,如不为空,则输出callback({data});
type=CALLBACK时,默认为callback,自动调用页面JS回调方法
*/
);
$obj=newDataReturn($param);//创建DataReturn类对象
$obj->data_return();//按格式输出数据
?>
希望本文所述对大家php程序设计的学习有所帮助。