这里有新鲜出炉的PHP教程,程序狗速度看过来!
PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适用于web开发领域。PHP的文件后缀名为php。
PHP类的封装对于初学者来说是比较难懂的,下面这篇文章主要给大家介绍了关于PHP常用操作类之通信数据封装类实现的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编一起来一起学习学习吧。
前言
本文主要给大家介绍了关于PHP常用操作类之通信数据封装类实现的相关内容,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍:
必要性
不管在B/S架构中,还是C/S架构中,两端的数据通信(注:这里的通信是指的网络请求和回复操作)都无可避免,因为没有数据便没有内容,没有内容,又有什么意义 :)
一般来说C/S架构通信执行流程如下:
而B/S架构通信执行流程像这样:
选择
既然数据通信,不可避免,那应该选择哪种通信方式比较好呢?目前来看服务器与客户端进行数据传输与交互的方式主要有URL、XML、JSON三种方式。
URL方式是最常用也是最直接的,通常用于GET方法,其实我认为POST中的Form表单实质上也是URL方式,但这种传输方式数据有限,也不规范,只适合一些简单场景。XML和JSON实质上都是对数据的描述,目的是对复杂数据进行分割、包装、规范化等一系列处理,方便数据传输和解析,相对来说JSON比XML更轻巧但却更灵活强大,举个例子:用以上两种方式表示我的个人信息如下:
- JSON: {
- "name": "entner",
- "age": 21,
- "gender": "男"
- }
- XML: <ROOT > <name > entner < /name>
- <age>21</age > <gender > 男 < /gender>
- </ROOT >
有兴趣的读者,可以参看后面的参考链接,写的非常详细。
如何封装?
上面讲了,XML和JSON是目前主流的通信数据格式,下面就来讲讲如何封装,方便运用。
假设我们在后台操作数据库服务器得到数组数据,对于数组转Json只需要json_encode函数就够了,它会自动递归检测,对于数组转XML,就需要严格按照格式来,具体看代码和注释吧。
Source Code
- <?php
- /**
- * TODO:Json格式数据通信
- * Author:entner
- * time: 2017-5-8
- * version:1.0
- * ready:
- 状态码 :int $code
- 提示消息:string $message
- 消息内容:array $data
- 数组包装:array $result
- function:
- show 封装多种通信数据格式
- jsonEncode 封装Json格式通信数据
- xmlToJson 封装xml格式通信数据
- xmlEncode 递归调用xmlToJson
- */
- Class Json{
- const JSON = "json";
- /**
- *按综合方式输出通信数据
- *@param inter code 状态码
- *@param char message 消息提示
- *@param array data 通信数据
- *@param string type 数据类型
- *return string
- */
- public function show($code,$message,$data=array(),$type = self::JSON){
- /* 检查状态码是否合法 */
- if(!is_numeric($code)){
- exit();
- }
- $result = array(
- 'code'=>$code,
- 'message'=>$message,
- 'data'=>$data
- );
- /* 由客户端传递参数决定封装数据的格式,默认Json格式 */
- $type = isset($_GET['format'])? $_GET['format']:self::JSON;
- if($type == 'xml'){
- $this->xmlEnCode($code,$message,$data);
- exit; //一次不允许并发多种格式,所以没必要执行下面的判断
- }else if($type == 'json'){
- $this->jsonEncode($code,$message,$data);
- exit ;
- }else if($type == 'array'){
- var_dump($result);
- exit;
- }else{
- // 客户端传来的数据格式为 http/ftp/
- }
- }
- /**
- *输出Json格式通信数据
- *@param inter code 状态码
- *@param char message 消息提示
- *@param array data 通信数据
- *return string
- */
- public function jsonEnCode($code,$message,$data=array()){
- if(!is_numeric($code)){
- exit();
- }
- $result = array(
- 'code'=>$code,
- 'message'=>$message,
- 'data'=>$data
- );
- echo json_encode($result); //json_encode会自动递归转换数组变量
- return true;
- }
- /**
- *输出XML格式通信数据
- *@param inter code 状态码
- *@param char message 消息提示
- *@param array data 通信数据
- *return string
- */
- public function xmlEnCode($code,$message,$data=array()){
- if(!is_numeric($code)){
- exit();
- }
- $result = array(
- 'code'=>$code,
- 'message'=>$message,
- 'data'=>$data
- );
- /* 拼接xml格式数据 */
- /* 这里一定要注意声明头部信息和XML声明 */
- header("Content-type:text/xml");
- $xml = "<?xml version = '1.0' encoding = 'UTF-8'?>\n";
- $xml .= "<root>\n"; /* XML标签其实也是字符串,所以要用 . 连接运算符 */
- $xml .= self::xmlToJson($result); /* 调用xmlToJson函数解析数组转换为节点 */
- $xml .= "</root>";
- echo $xml;
- }
- /**
- *递归拼接XML数据
- *@param inter code 状态码
- *@param char message 消息提示
- *@param array data 通信数据
- *return string
- */
- public static function xmlToJson($data){
- $xml = $attr = "";
- foreach($data as $k => $v){
- /*XML不允许出现数字标签,所以要么奖数字转化为字母,要么混合拼接,这里采用很合拼接的方式 */
- if(is_numeric($k)){
- $attr = " id = '{$k}' ";
- $k = "item";
- $xml .="<{$k}{$attr}>\n";
- /* 因为数组内部可能还存在数组,所以需要自行递归检查一遍,注意,在每次递归的时候,都要连接在$xml尾部,并换行 */
- $xml .=is_array($v)?self::xmlToJson($v):$v;
- $xml .="</{$k}>\n";
- }else{
- $xml .="<{$k}>\n";
- $xml .=is_array($v)?self::xmlToJson($v):$v;
- $xml .="</{$k}>\n";
- }
- }
- return $xml;
- }
- }
- $data = array(
- 'name'=>'entner',
- 'type'=>array(
- 0=>'a',
- 1=>'b'
- )
- );
- $try = new Json();
- $try->xmlEnCode(200,'success',$data);
总结
以上就是这篇文章的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对PHPERZ的支持。
参考链接
1、浅谈PHP与手机APP开发即API接口开发
2、C/S B/S 及WEB工作原理
3、对比分析json及XML
来源: http://www.phperz.com/article/17/1029/350717.html