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);

总结

参考链接

1、浅谈PHP与手机APP开发即API接口开发

2、C/S B/S 及WEB工作原理

3、对比分析json及XML

以上是 PHP常用操作类之通信数据封装类的实现 的全部内容, 来源链接: utcz.com/z/324788.html

回到顶部