PHP クラスのカプセル化は、初心者にとっては比較的理解しにくいものです。次の記事では、一般的な PHP 操作の通信データのカプセル化クラスの実装に関する関連情報を主に紹介しており、サンプル コードを通じて詳細に紹介されています。必要な友達はみんな編集者をフォローして一緒に学ぶことができます。
はじめに
この記事では、主に一般的な PHP 操作クラスの通信データのカプセル化クラスの実装に関する関連内容を紹介し、参考と学習のために共有します。詳細な紹介を参照してください:
必要性
B/S アーキテクチャでも C/S アーキテクチャでも、両端でのデータ通信 (注: ここでの通信はネットワークの要求と応答の操作を指します) ) は避けられません。データがなければコンテンツは存在せず、コンテンツがなければ、どういう意味ですか:)
一般的に言えば、C/S アーキテクチャの通信実行プロセスは次のとおりです:
そして 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 に変換するには、配列の再帰を自動的に検出するだけで十分です。そのため、形式に厳密に従う必要があります。詳細についてはコードとコメントを参照してください。
ソースコード
<?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 中国語 Web サイトの他の関連記事を参照してください。