最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP常用操作類之通信數(shù)據(jù)封裝類的實現(xiàn)

 更新時間:2017年07月16日 15:39:10   作者:entner  
PHP類的封裝對于初學者來說是比較難懂的,下面這篇文章主要給大家介紹了關于PHP常用操作類之通信數(shù)據(jù)封裝類實現(xiàn)的相關資料,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面跟著小編一起來一起學習學習吧。

前言

本文主要給大家介紹了關于PHP常用操作類之通信數(shù)據(jù)封裝類實現(xiàn)的相關內容,分享出來供大家參考學習,下面話不多說,來一起看看詳細的介紹:

必要性

不管在B/S架構中,還是C/S架構中,兩端的數(shù)據(jù)通信(注:這里的通信是指的網絡請求和回復操作)都無可避免,因為沒有數(shù)據(jù)便沒有內容,沒有內容,又有什么意義 :)

一般來說C/S架構通信執(zhí)行流程如下:

而B/S架構通信執(zhí)行流程像這樣:

選擇

既然數(shù)據(jù)通信,不可避免,那應該選擇哪種通信方式比較好呢?目前來看服務器與客戶端進行數(shù)據(jù)傳輸與交互的方式主要有URL、XML、JSON三種方式。

URL方式是最常用也是最直接的,通常用于GET方法,其實我認為POST中的Form表單實質上也是URL方式,但這種傳輸方式數(shù)據(jù)有限,也不規(guī)范,只適合一些簡單場景。XML和JSON實質上都是對數(shù)據(jù)的描述,目的是對復雜數(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ù)據(jù)庫服務器得到數(shù)組數(shù)據(jù),對于數(shù)組轉Json只需要json_encode函數(shù)就夠了,它會自動遞歸檢測,對于數(shù)組轉XML,就需要嚴格按照格式來,具體看代碼和注釋吧。

Source Code

<?php
/**
 * TODO:Json格式數(shù)據(jù)通信
 * Author:entner
 * time: 2017-5-8
 * version:1.0
 * ready:
  狀態(tài)碼 :int $code
  提示消息:string $message
  消息內容:array $data
  數(shù)組包裝:array $result
  

 function: 
  show   封裝多種通信數(shù)據(jù)格式
  jsonEncode 封裝Json格式通信數(shù)據(jù)
  xmlToJson 封裝xml格式通信數(shù)據(jù)
  xmlEncode  遞歸調用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會自動遞歸轉換數(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); /* 調用xmlToJson函數(shù)解析數(shù)組轉換為節(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ù)字轉化為字母,要么混合拼接,這里采用很合拼接的方式 */
   if(is_numeric($k)){
    $attr = " id = '{$k}' ";
    $k = "item";
    $xml .="<{$k}{$attr}>\n";
    /* 因為數(shù)組內部可能還存在數(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);

總結

以上就是這篇文章的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

參考鏈接

1、淺談PHP與手機APP開發(fā)即API接口開發(fā)

2、C/S B/S 及WEB工作原理

3、對比分析json及XML

您可能感興趣的文章:

相關文章

  • PHP實現(xiàn)的MD5結合RSA簽名算法實例

    PHP實現(xiàn)的MD5結合RSA簽名算法實例

    這篇文章主要介紹了PHP實現(xiàn)的MD5結合RSA簽名算法,結合實例形式分析了php使用md5結合RSA實現(xiàn)的簽名算法相關操作技巧,并附帶了RSA公鑰與私鑰的相關說明,需要的朋友可以參考下
    2017-10-10
  • PHP中獲取內網用戶MAC地址(WINDOWS/linux)的實現(xiàn)代碼

    PHP中獲取內網用戶MAC地址(WINDOWS/linux)的實現(xiàn)代碼

    做一個內網根據(jù)MAC地址自動登錄的應用,在WINDOW 2003可以正常使用,函數(shù)如下
    2011-08-08
  • PHP檢測一個數(shù)組有沒有定義的方法步驟

    PHP檢測一個數(shù)組有沒有定義的方法步驟

    在本篇文章里小編給大家分享的是關于PHP檢測一個數(shù)組有沒有定義的方法步驟詳解,有需要的朋友們參考下。
    2019-07-07
  • php實現(xiàn)的樹形結構數(shù)據(jù)存取類實例

    php實現(xiàn)的樹形結構數(shù)據(jù)存取類實例

    這篇文章主要介紹了php實現(xiàn)的樹形結構數(shù)據(jù)存取類,實例演示了以樹形數(shù)據(jù)結構存取數(shù)據(jù)的實現(xiàn)方法,對于學習基于PHP的數(shù)據(jù)結構有一定的參考借鑒價值,需要的朋友可以參考下
    2014-11-11
  • PHP封裝的分頁類與簡單用法示例

    PHP封裝的分頁類與簡單用法示例

    這篇文章主要介紹了PHP封裝的分頁類與簡單用法,結合實例形式分析了php數(shù)據(jù)庫查詢、分頁、輸出顯示等相關操作技巧,需要的朋友可以參考下
    2019-02-02
  • php正則preg_replace_callback函數(shù)用法實例

    php正則preg_replace_callback函數(shù)用法實例

    這篇文章主要介紹了php正則preg_replace_callback函數(shù)用法,實例分析了preg_replace_callback函數(shù)進行正則替換的相關技巧,需要的朋友可以參考下
    2015-06-06
  • PHP中HTML標簽過濾技巧

    PHP中HTML標簽過濾技巧

    htmlspecialchars()函數(shù)的過濾效果始終不如strip_tags()函數(shù)的過濾效果好,下面有個不錯的方法,感興趣的朋友可以參考下,希望對大家有所幫助
    2014-01-01
  • PHP獲取類私有屬性的3種方法

    PHP獲取類私有屬性的3種方法

    這篇文章主要介紹了PHP獲取類私有屬性的3種方法,幫助大家更好的理解和使用php,感興趣的朋友可以了解下
    2020-09-09
  • PHP中防止SQL注入攻擊和XSS攻擊的兩個簡單方法

    PHP中防止SQL注入攻擊和XSS攻擊的兩個簡單方法

    所有有打印的語句如echo,print等 在打印前都要使用htmlentities() 進行過濾,這樣可以防止Xss,注意中文要寫出htmlentities
    2010-04-04
  • PHP源碼之explode使用說明

    PHP源碼之explode使用說明

    最近一直在想有關字符串操作的一些效率上的事情,截取字串的問題,都會避免不了重新分配空間的消耗,也順帶看了explode這個函數(shù)的源碼,理解下,拿出自己的分析共享下
    2011-08-08

最新評論

安泽县| 通城县| 南华县| 宁阳县| 称多县| 峡江县| 宜川县| 金沙县| 甘孜县| 皋兰县| 荔波县| 烟台市| 黎川县| 宝清县| 孝感市| 连平县| 南澳县| 凌海市| 临潭县| 正安县| 南京市| 原平市| 涞水县| 溧水县| 灵台县| 翁牛特旗| 玛纳斯县| 开封市| 兴安盟| 云安县| 东台市| 辰溪县| 航空| 淮南市| 阳西县| 安顺市| 高碑店市| 井冈山市| 龙州县| 康乐县| 宁陕县|