Heim  >  Artikel  >  Backend-Entwicklung  >  Wie implementiert PHP Operationsklassen (Kommunikationsdatenkapselungsklassen)?

Wie implementiert PHP Operationsklassen (Kommunikationsdatenkapselungsklassen)?

黄舟
黄舟Original
2017-07-17 09:48:291070Durchsuche

Die Kapselung von PHP-Klassen ist für Anfänger schwer zu verstehen. Der Artikel stellt hauptsächlich relevante Informationen zur Implementierung gängiger PHP-Operationsklassen vor Sicherer Referenz- und Lernwert für alle Freunde, die es brauchen, folgen Sie bitte dem Herausgeber, um gemeinsam zu lernen.

Vorwort

Dieser Artikel stellt Ihnen hauptsächlich die relevanten Inhalte zur Implementierung der Kommunikationsdaten-Kapselungsklasse allgemeiner PHP-Operationen vor und teilt sie Mit Ihnen. Referenzstudie, unten gibt es nicht viel zu sagen, schauen wir uns die ausführliche Einführung an:

Notwendigkeit

Nein Egal wo B/ In S Architektur oder in C/S-Architektur ist die Datenkommunikation an beiden Enden (Hinweis: Kommunikation bezieht sich hier auf Netzwerkanforderungs- und Antwortvorgänge) unvermeidlich, denn ohne Daten gibt es keinen Inhalt, kein Inhalt, worum geht es :)

Im Allgemeinen ist der Kommunikationsausführungsprozess der C/S-Architektur wie folgt:

Und das B /S-Architektur-Kommunikationsausführung Der Prozess ist wie folgt:

Wählen Sie

Da Daten Kommunikation ist unvermeidlich, sie sollte es tun. Welche Kommunikationsmethode ist besser zu wählen? Derzeit gibt es drei Hauptarten der Datenübertragung und Interaktion zwischen dem Server und dem Client: URL, XML und JSON.

Die URL-Methode ist die am häufigsten verwendete und direkteste Methode und wird normalerweise für die GET-Methode verwendet. Tatsächlich denke ich, dass das Formularformular in POST tatsächlich die URL-Methode ist, aber diese Übertragungsmethode hat nur begrenzte Daten und ist es nicht standardisiert. Es ist nur für einige einfache Szenen geeignet. XML und JSON sind im Wesentlichen Beschreibungen von Daten. Der Zweck besteht darin, komplexe Daten zu segmentieren, zu verpacken und zu standardisieren, um die Datenübertragung und -analyse zu erleichtern. Beispiel: Verwendung Die beiden oben genannten Methoden, um meine persönlichen Daten wie folgt auszudrücken:

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

Interessierte Leser können auf den Referenzlink unten verweisen, der sehr detailliert ist.

Wie verpacken?

Wie oben erwähnt, sind XML und JSON derzeit die gängigen Kommunikationsdatenformate. Lassen Sie uns darüber sprechen, wie man sie für eine einfache Verwendung kapselt.

Angenommen, wir betreiben den Datenbankserver im Hintergrund, um das Array in Json zu konvertieren. Es reicht aus, das Array automatisch zu rekursiv zu konvertieren Um XML zu konvertieren, müssen Sie sich strikt an das Format halten. Schauen Sie sich bitte den Code und die Kommentare an.

Quellcode

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

Zusammenfassung

Das obige ist der detaillierte Inhalt vonWie implementiert PHP Operationsklassen (Kommunikationsdatenkapselungsklassen)?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn