protobuf (Google Protocol Buffers) は、Google が提供する効率的なプロトコル データ交換フォーマット ツール ライブラリです (Json と同様) が、Protobuf は Json と比較して変換効率が高く、時間効率とスペース効率はいずれも 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 { .... }
Read 中のコードをダウンロードすると、Google\Protobuf の下のクラスが使用されていることがわかります。これは PHP ライブラリです。ダウンロードできます:
https://github.com/google/protobuf/tree/master /php/ src/Google/Protobuf
は、composer を使用してプロジェクトに導入することもできます。composer が自動的に Autoloader を生成するため、composer を使用することをお勧めします:
composer require google/protobuf
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 中国語 Web サイトの他の関連記事を参照してください。