《PHP實例:PHP常用操作類之通信數據封裝類的實現》要點:
本文介紹了PHP實例:PHP常用操作類之通信數據封裝類的實現,希望對您有用。如果有疑問,可以聯系我們。
PHP應用前言
PHP應用本文主要給大家介紹了關于PHP常用操作類之通信數據封裝類實現的相關內容,分享出來供大家參考學習,下面話不多說,來一起看看詳細的介紹:
PHP應用必要性
PHP應用不管在B/S架構中,還是C/S架構中,兩端的數據通信(注:這里的通信是指的網絡請求和回復操作)都無可避免,因為沒有數據便沒有內容,沒有內容,又有什么意義 :)
PHP應用一般來說C/S架構通信執行流程如下:
PHP應用
PHP應用而B/S架構通信執行流程像這樣:
PHP應用
PHP應用選擇
PHP應用既然數據通信,不可避免,那應該選擇哪種通信方式比較好呢?目前來看服務器與客戶端進行數據傳輸與交互的方式主要有URL、XML、JSON三種方式.
PHP應用URL方式是最常用也是最直接的,通常用于GET方法,其實我認為POST中的Form表單實質上也是URL方式,但這種傳輸方式數據有限,也不規范,只適合一些簡單場景.XML和JSON實質上都是對數據的描述,目的是對復雜數據進行分割、包裝、規范化等一系列處理,方便數據傳輸和解析,相對來說JSON比XML更輕巧但卻更靈活強大,舉個例子:用以上兩種方式表示我的個人信息如下:
PHP應用
JSON:
{"name":"entner","age":21,"gender":"男"}
XML:
<ROOT>
<name>entner</name>
<age>21</age>
<gender>男</gender>
</ROOT>
PHP應用有興趣的讀者,可以參看后面的參考鏈接,寫的非常詳細.
PHP應用如何封裝?
PHP應用上面講了,XML和JSON是目前主流的通信數據格式,下面就來講講如何封裝,方便運用.
PHP應用假設我們在后臺操作數據庫服務器得到數組數據,對于數組轉Json只需要json_encode函數就夠了,它會自動遞歸檢測,對于數組轉XML,就需要嚴格按照格式來,具體看代碼和注釋吧.
PHP應用Source Code
PHP應用
<?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);
PHP應用總結
PHP應用以上就是這篇文章的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對維易PHP的支持.
PHP應用參考鏈接
PHP應用1、淺談PHP與手機APP開發即API接口開發
PHP應用2、C/S B/S 及WEB工作原理
PHP應用3、對比分析json及XML