PHP通訊資料封裝類的實現代碼分享

來源:互聯網
上載者:User
PHP類的封裝對於初學者來說是比較難懂的,本文主要給大家介紹了關於PHP常用操作類之通訊資料封裝類實現的相關資料,文中通過範例程式碼介紹的非常詳細,對大傢具有一定的參考學習價值,希望能協助到大家。

必要性

不管在B/S架構中,還是C/S架構中,兩端的資料通訊(註:這裡的通訊是指的網路請求和回複操作)都無可避免,因為沒有資料便沒有內容,沒有內容,又有什麼意義 :)

一般來說C/S架構通訊執行流程如下:

而B/S架構通訊執行流程像這樣:

選擇

既然資料通訊,不可避免,那應該選擇哪種通訊方式比較好呢?目前來看伺服器與用戶端進行資料轉送與互動的方式主要有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);

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.