>백엔드 개발 >PHP 튜토리얼 >PHP 통신 데이터 캡슐화 클래스의 구현 코드 공유

PHP 통신 데이터 캡슐화 클래스의 구현 코드 공유

小云云
小云云원래의
2018-02-07 09:40:541630검색

PHP 클래스 캡슐화는 초보자가 이해하기 상대적으로 어렵습니다. 이 기사에서는 주로 PHP 공통 작업의 통신 데이터 캡슐화 클래스 구현에 대한 관련 정보를 샘플 코드를 통해 자세히 소개합니다. 학습 가치를 참고하세요. 모두에게 도움이 되기를 바랍니다.

Necessity

B/S 아키텍처이든 C/S 아키텍처이든 양쪽 끝의 데이터 통신(참고: 여기서 통신은 네트워크 요청 및 응답 작업을 나타냄)은 불가피합니다. content, no content, what's the point :)

일반적으로 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(
   &#39;code&#39;=>$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 = &#39;1.0&#39; encoding = &#39;UTF-8&#39;?>\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는 연산 클래스(통신 데이터 캡슐화 클래스)를 어떻게 구현하나요?

통신 데이터 분석, 모니터링, 변환에 사용 MySQL-Proxy(1)[그림]_MySQL

위 내용은 PHP 통신 데이터 캡슐화 클래스의 구현 코드 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.