Home  >  Article  >  Backend Development  >  Detailed explanation of methods of communication data encapsulation class of PHP common operation classes

Detailed explanation of methods of communication data encapsulation class of PHP common operation classes

墨辰丷
墨辰丷Original
2018-05-19 13:46:591437browse

This article mainly introduces the detailed method of communication data encapsulation class of PHP common operations. Interested friends can refer to it. I hope it will be helpful to everyone. Preface

Necessity

Whether it is in the B/S architecture or the C/S architecture , data communication at both ends (note: communication here refers to network request and reply operations) is inevitable, because without data, there is no content, and without content, what is the point:)

Generally speaking, the C/S architecture communication execution process is as follows:

and the B/S architecture communication execution process is as follows:

Choice

Since data communication is inevitable, which communication method should be chosen better? At present, there are three main ways of data transmission and interaction between the server and the client: URL, XML, and JSON.

The URL method is the most commonly used and direct. It is usually used for the GET method. In fact, I think the Form form in POST is actually the URL method. However, this transmission method has limited data and is not standardized. It is only suitable for Some simple scenes. XML and JSON are essentially descriptions of data. The purpose is to segment, package, standardize and other processing of complex data to facilitate data transmission and analysis. Relatively speaking, JSON is lighter but more flexible and powerful than XML. For example Example: Use the above two methods to express my personal information as follows:

 JSON:
 {"name":"entner","age":21,"gender":"男"}
 
 XML:
 <ROOT>
  <name>entner</name>
  <age>21</age>
  <gender>男</gender>
 </ROOT>

Interested readers can refer to the reference link below, which is very detailed.

How to encapsulate?

As mentioned above, XML and JSON are currently the mainstream communication data formats. Let’s talk about how to encapsulate them for easy use.

Assume that we operate the database server in the background to obtain array data. To convert the array to Json, only the json_encode function is enough. It will automatically detect recursion. For the array to XML, you need to strictly follow the format. See the code for details. and comments.

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(
   &#39;code&#39;=>$code,
   &#39;message&#39;=>$message,
   &#39;data&#39;=>$data
   );

  /* 由客户端传递参数决定封装数据的格式,默认Json格式 */
  $type = isset($_GET[&#39;format&#39;])? $_GET[&#39;format&#39;]:self::JSON;

  if($type == &#39;xml&#39;){
   $this->xmlEnCode($code,$message,$data);
   exit; //一次不允许并发多种格式,所以没必要执行下面的判断
  }else if($type == &#39;json&#39;){
   $this->jsonEncode($code,$message,$data);
   exit ;
  }else if($type == &#39;array&#39;){
   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(
   &#39;code&#39;=>$code,
   &#39;message&#39;=>$message,
   &#39;data&#39;=>$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(
   &#39;code&#39;=>$code,
   &#39;message&#39;=>$message,
   &#39;data&#39;=>$data
   );

  /* 拼接xml格式数据 */
  
  
  /* 这里一定要注意声明头部信息和XML声明 */
  header("Content-type:text/xml");
  $xml = "<?xml version = &#39;1.0&#39; encoding = &#39;UTF-8&#39;?>\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 = &#39;{$k}&#39; ";
    $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(
 
 &#39;name&#39;=>&#39;entner&#39;,
 &#39;type&#39;=>array(
   0=>&#39;a&#39;,
   1=>&#39;b&#39;
  )
 );
$try = new Json();
$try->xmlEnCode(200,&#39;success&#39;,$data);

##Related recommendations:

php mysql database how toencapsulation class

##php creates a complete multi-level directory

Method of encapsulation class
#php verification code

Encapsulation class


The above is the detailed content of Detailed explanation of methods of communication data encapsulation class of PHP common operation classes. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn