前言
必要性不管在b/s架構中,還是c/s架構中,兩端的資料通訊(注:這裡的通訊是指的網路請求和回覆操作)都無可避免,因為沒有資料便沒有內容,沒有內容,又有什麼意義 :)
一般來說c/s架構通訊執行流程如下:
而b/s架構通訊執行流程像這樣:
選擇既然資料通訊,不可避免,那應該選擇哪種通訊方式比較好呢?目前來看伺服器與客戶端進行資料傳輸與互動的方式主要有url、xml、json三種方式。
url方式是最常用也是最直接的,通常用於get方法,其實我認為post中的form表單實質上也是url方式,但這種傳輸方式資料有限,也不規範,只適合一些簡單場景。xml和json實質上都是對資料的描述,目的是對複雜資料進行分割、包裝、規範化等一系列處理,方便資料傳輸和解析,相對來說json比xml更輕巧但卻更靈活強大,舉個例子:用以上兩種方式表示我的個人資訊如下:
json:
xml:
entner
21男
有興趣的讀者,可以參看後面的參考鏈結,寫的非常詳細。
如何封裝?
上面講了,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
$result = array(
'code'=>$code,
'message'=>$message,
'data'=>$data
);/* 由客戶端傳遞引數決定封裝資料的格式,預設json格式 */
$type = isset($_get['format'])? $_get['format']:self::json;
if($type == 'xml')else if($type == 'json')else if($type == 'array')else
}/**
*輸出json格式通訊資料
*@param inter code 狀態碼
*@param char message 訊息提示
*@param array data 通訊資料
*return string
*/ 程式設計客棧 public function jsonencode($code,$message,$data=array())
$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())
$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 .= "\n"; /* xml標籤其實也是字串,所以要用 . 連線運算子 */
$xml .= self::xmltojson($result); /* 呼叫xmltojson函式解析陣列轉換為節點 */
$xml .= "";
echo $xml;
} /**
*遞迴拼接xml資料
*@param inter code 狀態碼
*@param char mes程式設計客棧sage 訊息提示
*@param array data 通訊資料
*return string
*/ public static function xmltojson($dwww.cppcns.comata)' ";
$k = "item";
$xml .="\n";
/* 因為陣列內部可能還存在陣列,所以需要自行遞迴檢查一遍,注意,在每次遞迴的時候,都要連線在$xml尾部,並換行 */
$xml .=is_array($v)?self::xmltojson($v):$v;
$xml .=">\n";
}else>\n";}}
return $xml; }}
$data = array(
'name'=>'entner',
'type'=>array(
0=>'a',
1=>'b'
) );
$try = new json();
$try->xmlencode(200,'success',$data);
總結以上就是這篇文章的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對我們的支援。
參考鏈結
1、**php與手機app開發即api介面開發
2、c/s b/s 及web工作原理
3、對比分析json及xml
本文標題: php常用操作類之通訊資料封裝類的實現
本文位址:
MySQL操作類的封裝(PHP)
class mysql 連線資料庫 param string dbhost 主機名 param string dbuser 使用者名稱 param string dbpsw 密碼 param string dbname 資料庫名 param string dbcharset 字符集 編碼 retur...
PHP類基礎(6)之封裝類
private 型別的屬性不能直接訪問,需要通過特定介面進行訪問 get 屬性名 外部訪問不存在或私有屬性時自動呼叫 set 屬性,值 外部給類中不存在或不可見屬性賦值時自動呼叫 isset 屬性名 外部檢測某個私有屬性是否存在時自動呼叫 unset 屬性名 在類外部銷毀某個私有屬性時自動呼叫它 物...
C 封裝Word常用操作類
object nullobj system.reflection.missing.value microsoft.office.interop.word.document doc word.documents.open ref filename,ref nullobj,ref nullobj,ref...