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


Posted in PHP onJuly 16, 2017

前言

本文主要给大家介绍了关于PHP常用操作类之通信数据封装类实现的相关内容,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍:

必要性

不管在B/S架构中,还是C/S架构中,两端的数据通信(注:这里的通信是指的网络请求和回复操作)都无可避免,因为没有数据便没有内容,没有内容,又有什么意义 :)

一般来说C/S架构通信执行流程如下:

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

而B/S架构通信执行流程像这样:

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

选择

既然数据通信,不可避免,那应该选择哪种通信方式比较好呢?目前来看服务器与客户端进行数据传输与交互的方式主要有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 相关文章推荐
如何做到多笔资料的同步
Oct 09 PHP
php出现Cannot modify header information问题的解决方法大全
Apr 09 PHP
frename PHP 灵活文件命名函数 frename
Sep 09 PHP
Ajax+PHP 边学边练 之二 实例
Nov 24 PHP
php关于array_multisort多维数组排序的使用说明
Jan 04 PHP
解析php扩展php_curl.dll不加载的解决方法
Jun 26 PHP
php二维数组排序方法(array_multisort usort)
Dec 25 PHP
解决phpcms更换javascript的幻灯片代码调用图片问题
Dec 26 PHP
php session实现多级目录存放实现代码
Feb 03 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
Mar 31 PHP
php strftime函数获取日期时间(switch用法)
May 16 PHP
php变量与字符串的增删改查操作示例
May 07 PHP
Laravel网站打开速度优化的方法汇总
Jul 16 #PHP
PHP实现创建微信自定义菜单的方法示例
Jul 14 #PHP
PHP微信公众号开发之微信红包实现方法分析
Jul 14 #PHP
PHP机器学习库php-ml的简单测试和使用方法
Jul 14 #PHP
thinkphp3.2嵌入百度编辑器ueditor的实例代码
Jul 13 #PHP
PHP微信PC二维码登陆的实现思路
Jul 13 #PHP
PHP基于socket实现客户端和服务端通讯功能
Jul 13 #PHP
You might like
PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径
2014/06/30 PHP
yii2实现Ueditor百度编辑器的示例代码
2018/11/02 PHP
PHP的imageTtfText()函数深入详解
2021/03/03 PHP
javascript 鼠标滚轮事件
2009/04/09 Javascript
jquery validate poshytip 自定义样式
2012/11/26 Javascript
Js冒泡事件详解及阻止示例
2014/03/21 Javascript
ECMAScript6的新特性箭头函数(Arrow Function)详细介绍
2014/06/07 Javascript
JavaScript使用shift方法移除素组第一个元素实例分析
2015/04/06 Javascript
浅析js中substring和substr的方法
2015/11/09 Javascript
推荐三款不错的图片压缩上传插件(webuploader、localResizeIMG4、LUploader)
2017/04/21 Javascript
详解angularJs模块ui-router之状态嵌套和视图嵌套
2017/04/28 Javascript
Ionic3 UI组件之autocomplete详解
2017/06/08 Javascript
深入理解node.js http模块
2018/01/24 Javascript
Node.js的Koa实现JWT用户认证方法
2018/05/05 Javascript
Vue面试题及Vue知识点整理
2018/10/07 Javascript
NodeJS模块与ES6模块系统语法及注意点详解
2019/01/04 NodeJs
javascript创建元素和删除元素实例小结
2019/06/19 Javascript
Vue.js页面中有多个input搜索框如何实现防抖操作
2019/11/04 Javascript
Layui实现主窗口和Iframe层参数传递
2019/11/14 Javascript
Python 过滤字符串的技巧,map与itertools.imap
2008/09/06 Python
SublimeText 2编译python出错的解决方法(The system cannot find the file specified)
2013/11/27 Python
python过滤字符串中不属于指定集合中字符的类实例
2015/06/30 Python
selenium+python实现自动登录脚本
2018/04/22 Python
python2和python3哪个使用率高
2020/06/23 Python
python 基于opencv去除图片阴影
2021/01/26 Python
详解background属性的8个属性值(面试题)
2020/11/02 HTML / CSS
HTML5 本地存储和内容按需加载的思路和方法
2011/04/07 HTML / CSS
New Era英国官网:美国棒球帽品牌
2018/03/21 全球购物
请写出 BOOL flag 与"零值"比较的 if 语句
2016/02/29 面试题
乐观自信演讲稿范文
2014/05/21 职场文书
公司授权委托书范本
2014/09/18 职场文书
2014年党员教师自我剖析材料
2014/09/30 职场文书
归元寺导游词
2015/02/06 职场文书
Nginx配置SSL证书出错解决方案
2021/03/31 Servers
Python的代理类实现,控制访问和修改属性的权限你都了解吗
2022/03/21 Python
使用Nginx+Tomcat实现负载均衡的全过程
2022/05/30 Servers