この記事では、主に一般的な PHP 操作の通信データのカプセル化クラスの詳細な方法を紹介します。興味のある方はぜひ参考にしてください。 はじめに
必要性
B/SアーキテクチャであってもC/Sアーキテクチャであっても、両端でのデータ通信(注:ここでの通信とは、ネットワークのリクエストと応答の動作を指します)データがなければコンテンツは存在せず、コンテンツがなければ、それは避けられます:)
一般的に言えば、C/S アーキテクチャの通信実行プロセスは次のとおりです:
The B/ Sアーキテクチャの通信実行プロセスは次のとおりです:
Choose
データ通信は避けられないので、どの通信方法が良いでしょうか?現在、サーバーとクライアント間のデータ送信と対話には、URL、XML、JSON という 3 つの主な方法があります。
URL メソッドは最も一般的に使用され直接的なもので、通常は GET メソッドに使用されます。実際には POST の Form フォームが URL メソッドだと思いますが、この送信メソッドはデータが限られており、標準化されておらず、一部の単純なシナリオにのみ適しています。 XML と JSON は本質的にデータの記述であり、その目的は、複雑なデータのセグメント化、パッケージ化、標準化などの処理を行って、データの送信と分析を容易にすることです。例:私の個人情報を表現する上記の 2 つの方法は次のとおりです。
JSON: {"name":"entner","age":21,"gender":"男"} XML: <ROOT> <name>entner</name> <age>21</age> <gender>男</gender> </ROOT>
興味のある読者は、非常に詳細な以下の参考リンクを参照してください。
カプセル化するにはどうすればよいですか?
上で述べたように、XML と JSON は現在主流の通信データ形式であり、それらを簡単に使用できるようにカプセル化する方法について説明します。
配列データを取得するためにバックグラウンドでデータベースサーバーを動作させるとします。配列を Json に変換するには、json_encode 関数のみが必要です。配列の XML への変換は、形式に厳密に従う必要があります。詳細についてはコードとコメントを参照してください。
ソースコード
<?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 中国語 Web サイトの他の関連記事を参照してください。