>  기사  >  백엔드 개발  >  PHP 공통 연산 클래스의 통신 데이터 캡슐화 클래스의 방법에 대한 자세한 설명

PHP 공통 연산 클래스의 통신 데이터 캡슐화 클래스의 방법에 대한 자세한 설명

墨辰丷
墨辰丷원래의
2018-05-19 13:46:591367검색

이 글은 주로 일반적인 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(
   &#39;code&#39;=>$code,
   &#39;message&#39;=>$message,
   &#39;data&#39;=>$data
   );

  /* 由客户端传递参数决定封装数据的格式,默认Json格式 */
  $type = isset($_GET[&#39;format&#39;])? $_GET[&#39;format&#39;]:self::JSON;

  if($type == &#39;xml&#39;){
   $this->xmlEnCode($code,$message,$data);
   exit; //一次不允许并发多种格式,所以没必要执行下面的判断
  }else if($type == &#39;json&#39;){
   $this->jsonEncode($code,$message,$data);
   exit ;
  }else if($type == &#39;array&#39;){
   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(
   &#39;code&#39;=>$code,
   &#39;message&#39;=>$message,
   &#39;data&#39;=>$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(
   &#39;code&#39;=>$code,
   &#39;message&#39;=>$message,
   &#39;data&#39;=>$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 = &#39;{$k}&#39; ";
    $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(
 
 &#39;name&#39;=>&#39;entner&#39;,
 &#39;type&#39;=>array(
   0=>&#39;a&#39;,
   1=>&#39;b&#39;
  )
 );
$try = new Json();
$try->xmlEnCode(200,&#39;success&#39;,$data);

관련 권장 사항:

php mysql 데이터베이스 방법클래스 캡슐화

php는 완전한 캡슐화를 통해 다중 레벨 디렉토리를 생성합니다. 클래스 메소드

php 인증 코드캡슐화된 클래스

위 내용은 PHP 공통 연산 클래스의 통신 데이터 캡슐화 클래스의 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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