protobuf(Google Protocol Buffers)는 Google에서 제공하는 효율적인 프로토콜 데이터 교환 형식 도구 라이브러리(Json과 유사)이지만 Json에 비해 Protobuf는 변환 효율성, 시간 효율성 및 공간 효율성이 모두 JSON의 3~5배 더 높습니다.
proto3에서는 protoc 명령을 직접 사용하여 PHP 코드를 생성할 수 있습니다. 생성된 PHP 코드는 직접 사용할 수 없으며 Protobuf PHP 라이브러리 지원이 필요합니다.
다음은 예제를 사용하여 PHP에서 protobuf를 사용하는 방법을 보여줍니다. 먼저 proto 파일을 정의합니다.
syntax = "proto3"; package lm; message helloworld { int32 id = 1; // ID string str = 2; // str int32 opt = 3; // optional field }
여기서는 proto2와 다른 proto3의 구문이 사용됩니다. 필수 및 선택 사항 제한은 더 이상 사용할 수 없으며 모든 필드는 선택 사항입니다. proto3과 proto2의 차이점은 무엇입니까? 이 기사를 참조하십시오.
그런 다음 protoc을 사용하여 PHP 파일을 생성합니다.
protoc --php_out=./ hello.proto
hello.pb.php 파일이 생성되는 것을 볼 수 있습니다.
namespace Lm; use Google\Protobuf\Internal\DescriptorPool; use Google\Protobuf\Internal\GPBType; use Google\Protobuf\Internal\RepeatedField; use Google\Protobuf\Internal\GPBUtil; class helloworld extends \Google\Protobuf\Internal\Message { .... }
내부 코드를 읽고 GoogleProtobuf 아래 클래스를 사용하는 것을 확인하세요. 이것은 PHP 라이브러리입니다. 다운로드할 수 있습니다.
https://github.com/google/protobuf/tree/master/php/src/Google/Protobuf
작곡가를 사용하여 프로젝트에 도입할 수도 있습니다. Composer가 자동으로 Autoloader를 생성하므로 Composer를 사용하는 것이 좋습니다.
composer require google/protobuf
composer를 사용하여 google/protobuf를 도입하면 공급업체 디렉터리가 프로젝트에 나타납니다. 자신의 코드에서 includevendor 아래에 autoload.php와 방금 생성된 helloworld.pb.php 파일을 포함시켜 바이너리를 읽고 쓸 수 있습니다.
google/protobuf 라이브러리의 도움으로 PHP가 protobuf 형식의 바이너리를 읽고 쓰는 것이 매우 편리합니다.
protobuf를 사용하여 바이너리 파일에 데이터 쓰기:
<?php include 'vendor/autoload.php'; include 'hello.pb.php'; $from = new \Lm\helloworld(); $from->setId(1); $from->setStr('foo bar, this is a message'); $from->setOpt(29); $data = $from->serializeToString(); file_put_contents('data.bin', $data);
동일한 바이너리 파일 읽기:
<?php include 'vendor/autoload.php'; include 'hello.pb.php'; $data = file_get_contents('data.bin'); $to = new \Lm\helloworld(); $to->mergeFromString($data); echo $to->getId() . PHP_EOL; echo $to->getStr() . PHP_EOL; echo $to->getOpt() . PHP_EOL;
권장 학습: php 비디오 튜토리얼
위 내용은 PHP에서 protobuf3을 읽고 쓰는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!