您好,登錄后才能下訂單哦!
這篇文章主要介紹了如何使用PHP實現(xiàn)通信數(shù)據(jù)封裝類,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
必要性
不管在B/S架構(gòu)中,還是C/S架構(gòu)中,兩端的數(shù)據(jù)通信(注:這里的通信是指的網(wǎng)絡(luò)請求和回復(fù)操作)都無可避免,因為沒有數(shù)據(jù)便沒有內(nèi)容,沒有內(nèi)容,又有什么意義 :)
一般來說C/S架構(gòu)通信執(zhí)行流程如下:
而B/S架構(gòu)通信執(zhí)行流程像這樣:
選擇
既然數(shù)據(jù)通信,不可避免,那應(yīng)該選擇哪種通信方式比較好呢?目前來看服務(wù)器與客戶端進行數(shù)據(jù)傳輸與交互的方式主要有URL、XML、JSON三種方式。
URL方式是最常用也是最直接的,通常用于GET方法,其實我認為POST中的Form表單實質(zhì)上也是URL方式,但這種傳輸方式數(shù)據(jù)有限,也不規(guī)范,只適合一些簡單場景。XML和JSON實質(zhì)上都是對數(shù)據(jù)的描述,目的是對復(fù)雜數(shù)據(jù)進行分割、包裝、規(guī)范化等一系列處理,方便數(shù)據(jù)傳輸和解析,相對來說JSON比XML更輕巧但卻更靈活強大,舉個例子:用以上兩種方式表示我的個人信息如下:
JSON: {"name":"entner","age":21,"gender":"男"} XML: <ROOT> <name>entner</name> <age>21</age> <gender>男</gender> </ROOT>
有興趣的讀者,可以參看后面的參考鏈接,寫的非常詳細。
如何封裝?
上面講了,XML和JSON是目前主流的通信數(shù)據(jù)格式,下面就來講講如何封裝,方便運用。
假設(shè)我們在后臺操作數(shù)據(jù)庫服務(wù)器得到數(shù)組數(shù)據(jù),對于數(shù)組轉(zhuǎn)Json只需要json_encode函數(shù)就夠了,它會自動遞歸檢測,對于數(shù)組轉(zhuǎn)XML,就需要嚴格按照格式來,具體看代碼和注釋吧。
Source Code
<?php /** * TODO:Json格式數(shù)據(jù)通信 * Author:entner * time: 2017-5-8 * version:1.0 * ready: 狀態(tài)碼 :int $code 提示消息:string $message 消息內(nèi)容:array $data 數(shù)組包裝:array $result function: show 封裝多種通信數(shù)據(jù)格式 jsonEncode 封裝Json格式通信數(shù)據(jù) xmlToJson 封裝xml格式通信數(shù)據(jù) xmlEncode 遞歸調(diào)用xmlToJson */ Class Json{ const JSON = "json"; /** *按綜合方式輸出通信數(shù)據(jù) *@param inter code 狀態(tài)碼 *@param char message 消息提示 *@param array data 通信數(shù)據(jù) *@param string type 數(shù)據(jù)類型 *return string */ public function show($code,$message,$data=array(),$type = self::JSON){ /* 檢查狀態(tài)碼是否合法 */ if(!is_numeric($code)){ exit(); } $result = array( 'code'=>$code, 'message'=>$message, 'data'=>$data ); /* 由客戶端傳遞參數(shù)決定封裝數(shù)據(jù)的格式,默認Json格式 */ $type = isset($_GET['format'])? $_GET['format']:self::JSON; if($type == 'xml'){ $this->xmlEnCode($code,$message,$data); exit; //一次不允許并發(fā)多種格式,所以沒必要執(zhí)行下面的判斷 }else if($type == 'json'){ $this->jsonEncode($code,$message,$data); exit ; }else if($type == 'array'){ var_dump($result); exit; }else{ // 客戶端傳來的數(shù)據(jù)格式為 http/ftp/ } } /** *輸出Json格式通信數(shù)據(jù) *@param inter code 狀態(tài)碼 *@param char message 消息提示 *@param array data 通信數(shù)據(jù) *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會自動遞歸轉(zhuǎn)換數(shù)組變量 return true; } /** *輸出XML格式通信數(shù)據(jù) *@param inter code 狀態(tài)碼 *@param char message 消息提示 *@param array data 通信數(shù)據(jù) *return string */ public function xmlEnCode($code,$message,$data=array()){ if(!is_numeric($code)){ exit(); } $result = array( 'code'=>$code, 'message'=>$message, 'data'=>$data ); /* 拼接xml格式數(shù)據(jù) */ /* 這里一定要注意聲明頭部信息和XML聲明 */ header("Content-type:text/xml"); $xml = "<?xml version = '1.0' encoding = 'UTF-8'?>\n"; $xml .= "<root>\n"; /* XML標簽其實也是字符串,所以要用 . 連接運算符 */ $xml .= self::xmlToJson($result); /* 調(diào)用xmlToJson函數(shù)解析數(shù)組轉(zhuǎn)換為節(jié)點 */ $xml .= "</root>"; echo $xml; } /** *遞歸拼接XML數(shù)據(jù) *@param inter code 狀態(tài)碼 *@param char message 消息提示 *@param array data 通信數(shù)據(jù) *return string */ public static function xmlToJson($data){ $xml = $attr = ""; foreach($data as $k => $v){ /*XML不允許出現(xiàn)數(shù)字標簽,所以要么獎數(shù)字轉(zhuǎn)化為字母,要么混合拼接,這里采用很合拼接的方式 */ if(is_numeric($k)){ $attr = " id = '{$k}' "; $k = "item"; $xml .="<{$k}{$attr}>\n"; /* 因為數(shù)組內(nèi)部可能還存在數(shù)組,所以需要自行遞歸檢查一遍,注意,在每次遞歸的時候,都要連接在$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);
感謝你能夠認真閱讀完這篇文章,希望小編分享的“如何使用PHP實現(xiàn)通信數(shù)據(jù)封裝類”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。