当前位置: 首页 > 后端技术 > PHP

PHP常用操作类实现-通信数据封装类

时间:2023-03-29 22:07:59 PHP

感谢大家的收藏和好评,这是对我最大的鼓励。必然性无论是B/S架构还是C/S架构,两端的数据通信(注意:这里的通信是指网络请求和回复操作)都是必然的,因为没有数据就没有内容,而有没有内容,有什么意义?)一般来说,C/S架构的通信执行流程是这样的:而B/S架构的通信执行流程是这样的:既然数据通信是不可避免的,那么应该选择哪种通信方式呢?目前,服务端与客户端之间的数据传输和交互主要有三种方式:URL、XML、JSON。URL方式是最常用的,也是最直接的。它通常用于GET方法。其实我觉得POST中的Form表单本质上就是URL方式,但是这种传输方式数据有限,不规范,只适用于一些简单的场景。XML和JSON本质上都是对数据的描述。目的是对复杂的数据进行切分、打包、归一化等一系列处理,以方便数据传输和分析。相对而言,JSON比XML更轻巧,但更灵活、更强大。例如Example:使用以上两种方式表达我的个人信息如下:JSON:{"name":"entner","age":21,"gender":"male"}XML:entner21Male有兴趣的读者可以参考下面的参考链接,里面很详细。如何包装?如上所述,XML和JSON是目前主流的通信数据格式。下面会讲到如何封装它们,方便使用。假设我们在后台操作数据库服务器获取数组数据,数组转Json只需要json_encode函数即可,它会自动递归检测。数组转XML,需要严格按照格式,具体见代码和注释。源码$code,'message'=>$message,'data'=>$data);/*封装数据的格式由客户端传递的参数决定,默认Json格式*/$type=isset($_GET['format'])?$_GET['格式']:self::JSON;如果($type=='xml'){$this->xmlEnCode($code,$message,$data);出口;//一次不允许多种格式,所以不需要执行下面的判断}elseif($type=='json'){$this->jsonEncode($code,$message,$data);出口;}elseif($type=='array'){var_dump($result);出口;}else{//客户端发送的数据格式为http/ftp/}}/***输出Json格式通讯数据*@paramintercodestatuscode*@paramcharmessage消息提示*@paramarray数据通讯数据*返回字符串*/publicfunctionjsonEnCode($code,$message,$data=array()){if(!is_numeric($code)){exit();}$result=array('code'=>$code,'message'=>$message,'data'=>$data);回声json_encode($result);//json_encode会自动递归转换数组变量returntrue;}/***以XML格式输出通讯数据*@paramintercode状态码*@paramcharmessage消息提示*@paramarraydata通讯数据*返回字符串*/publicfunctionxmlEnCode($code,$message,$data=array()){if(!is_numeric($code)){exit();}$result=array('code'=>$code,'message'=>$message,'data'=>$data);/*拼接xml格式数据*//*这里一定要注意header信息的声明和XML声明*/header("Content-type:text/xml");$xml="\n";$xml.="\n";/*XML标签实际上是字符串,所以使用.连接运算符*/$xml.=self::xmlToJson($result);/*调用xmlToJson函数解析数组并转换为节点*/$xml.="";回声$xml;}/***XML数据递归拼接*@paramintercode状态码*@paramcharmessage消息提示*@param数组数据通信数据*返回字符串*/publicstaticfunctionxmlToJson($data){$xml=$attr="";foreach($dataas$k=>$v){/*XML不允许数字标签符号,因此要么将奖号转换为字母,要么将它们混合拼接。这里使用了一种非常合适的拼接方式*/if(is_numeric($k)){$attr="id='{$k}'";$k="物品";$xml.="<{$k}{$attr}>\n";/*因为数组内部可能还有数组,需要自己递归查看。注意每次递归都要在$xml的末尾进行Connect,并把*/$xml.=is_array($v)?self::xmlToJson($v):$v;$xml.="\n";}else{$xml.="<{$k}>\n";$xml.=is_array($v)?self::xmlToJson($v):$v;$xml.="\n";}}返回$xml;}}$data=array('name'=>'entner','type'=>array(0=>'a',1=>'b'));$try=newJson();$try->xmlEnCode(200,'success',$data);参考链接浅谈PHP与手机APP开发,即API接口开发C/SB/S与WEB工作原理json与XML对比分析结语我一直在动这几天宿舍。我刚做完工作,第一时间就过来了。哈哈还是那句老话。欢迎留言和评论。