PHP 클래스 캡슐화는 초보자가 이해하기 상대적으로 어렵습니다. 다음 기사에서는 주로 PHP 공통 작업의 통신 데이터 캡슐화 클래스 구현에 대한 관련 정보를 샘플 코드를 통해 자세히 소개합니다. 필요한 친구들은 편집자를 따라가서 함께 배울 수 있습니다.
머리말
이 글은 주로 일반적인 PHP 연산 클래스의 통신 데이터 캡슐화 클래스 구현에 대한 관련 내용을 소개하고 참고 및 학습을 위해 공유합니다. 자세한 소개를 보세요 :
Necessity
B/S 아키텍처이든 C/S 아키텍처이든 양쪽 끝의 데이터 통신(참고: 여기서 통신은 네트워크 요청 및 응답 작업을 의미함) )는 불가피합니다. 데이터가 없으면 콘텐츠도 없고, 콘텐츠가 없으면 무슨 의미가 있겠습니까 :)
일반적으로 C/S 아키텍처 통신 실행 프로세스는 다음과 같습니다.
그리고 B/S 아키텍처 통신 실행 과정은 이렇습니다.
Choose
데이터 통신은 불가피하니 어떤 통신방식이 좋을까요? 현재 서버와 클라이언트 간의 데이터 전송 및 상호 작용에는 URL, XML 및 JSON의 세 가지 주요 방법이 있습니다.
URL 방식은 가장 일반적으로 사용되며 직접적이며 일반적으로 GET 방식에 사용됩니다. 사실 POST의 Form 형식이 실제로는 URL 방식이라고 생각하지만 이 전송 방식은 데이터가 제한되어 있고 표준화되어 있지 않습니다. 일부 간단한 시나리오에만 적합합니다. XML과 JSON은 본질적으로 데이터에 대한 설명입니다. 데이터 전송 및 분석을 용이하게 하기 위해 복잡한 데이터를 분할, 패키지, 표준화 및 기타 처리하는 것이 목적입니다. 예를 들어, JSON은 XML보다 더 가볍지만 더 유연하고 강력합니다. 위의 두 가지 방법으로 나의 개인 정보를 표현하는 방법은 다음과 같습니다.
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!