Maison  >  Article  >  développement back-end  >  Explication détaillée des méthodes de classe d'encapsulation des données de communication des classes d'opérations communes PHP

Explication détaillée des méthodes de classe d'encapsulation des données de communication des classes d'opérations communes PHP

墨辰丷
墨辰丷original
2018-05-19 13:46:591365parcourir

Cet article présente principalement la méthode détaillée de classe d'encapsulation des données de communication pour les opérations PHP courantes. Les amis intéressés peuvent s'y référer. J'espère qu'il sera utile à tout le monde. Avant-propos

Nécessité

Peu importe l'architecture B/S ou l'architecture C/S, la communication de données aux deux extrémités (remarque : la communication fait ici référence aux opérations de demande et de réponse du réseau) est inévitable, car sans données, il n'y a pas de contenu, et sans contenu, à quoi ça sert :)

D'une manière générale, le flux d'exécution des communications de l'architecture C/S est le suivant :

Le flux d'exécution des communications de l'architecture B/S est le suivant :

Choisir

La communication de données étant inévitable, quelle méthode de communication faut-il mieux choisir ? À l'heure actuelle, il existe trois modes principaux de transmission de données et d'interaction entre le serveur et le client : URL, XML et JSON.

La méthode URL est la plus couramment utilisée et la plus directe, généralement utilisée pour la méthode GET. En fait, je pense que le formulaire Form dans POST est en fait la méthode URL, mais cette méthode de transmission a des données limitées et ne l'est pas. Standardisé. Il ne convient que pour certaines scènes simples. XML et JSON sont essentiellement des descriptions de données. Le but est de segmenter, regrouper, normaliser et autres traitements de données complexes pour faciliter la transmission et l'analyse des données. Relativement parlant, JSON est plus léger mais plus flexible et puissant que XML. les deux méthodes ci-dessus pour exprimer mes informations personnelles comme suit :

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

Les lecteurs intéressés peuvent se référer au lien de référence ci-dessous, il est très détaillé.

Comment emballer ?

Comme mentionné ci-dessus, XML et JSON sont actuellement les principaux formats de données de communication. Parlons de la façon de les encapsuler pour une utilisation facile.

Supposons que nous exploitions le serveur de base de données en arrière-plan pour obtenir les données du tableau. Pour convertir le tableau en Json, seule la fonction json_encode suffit. Elle détectera automatiquement la récursivité. suivez strictement le format. Voir le code pour plus de détails et de commentaires.

Code source

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

Recommandations associées :

base de données php mysql comment classe d'encapsulation

php crée un multi -level directory Complète méthode de classe encapsulée

code de vérification phpclasse encapsulée

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn