Maison  >  Article  >  développement back-end  >  Partage de code d'implémentation de la classe d'encapsulation des données de communication PHP

Partage de code d'implémentation de la classe d'encapsulation des données de communication PHP

小云云
小云云original
2018-02-07 09:40:541581parcourir

L'encapsulation des classes PHP est relativement difficile à comprendre pour les débutants. Cet article vous présente principalement les informations pertinentes sur la mise en œuvre des classes d'encapsulation des données de communication des opérations courantes PHP. L'article la présente en détail à travers un exemple de code, ce qui est très utile. pour tout le monde. Il a une certaine valeur de référence et d’apprentissage, et j’espère qu’il pourra aider tout le monde.

Nécessité

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

De manière générale, le processus d'exécution de la communication de l'architecture C/S est le suivant :

Le processus d'exécution de la communication de l'architecture B/S est le suivant :

Sélectionner

Depuis la communication de données est inévitable, alors quelle méthode de communication devrait être la meilleure ? À 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, qui est très détaillé.

Comment encapsuler ?

Comme mentionné ci-dessus, XML et JSON sont actuellement les formats de données de communication les plus courants. 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écursion. Pour le tableau en XML, vous devez strictement. suivez 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,
   '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 = &#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 = '{$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);

Recommandations associées :

Explication détaillée de la classe d'encapsulation des données de communication en PHP

Comment implémenter la classe d'opération (classe d'encapsulation des données de communication) en PHP ?

Utilisé pour analyser, surveiller et transformer les données de communication MySQL-Proxy(1)[Picture]_MySQL

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
Article précédent:Comment PHP utilise ActiveMQArticle suivant:Comment PHP utilise ActiveMQ