protobuf-php-8 / protobuf-plugin
来自Google的Protocol Buffers的PHP代码生成插件
Requires
- php: >=5.5.0
- doctrine/inflector: ^1.0
- protobuf-php/google-protobuf-proto: >=0.1
- protobuf-php/protobuf: >=0.1
- psr/log: ^1.0|^2.0
- symfony/console: ^2.5|^3.0
- symfony/process: ^2.5|^3.0
- zendframework/zend-code: ^2.6
Requires (Dev)
- instaclick/coding-standard: ~1.1
- instaclick/object-calisthenics-sniffs: dev-master
- instaclick/symfony2-coding-standard: dev-remaster
- mikey179/vfsstream: ~1.6
- php-mock/php-mock-phpunit: ^0.2
- phpunit/phpunit: ~4
- satooshi/php-coveralls: ~0.6
- squizlabs/php_codesniffer: ~1.5
This package is auto-updated.
Last update: 2024-09-19 13:48:04 UTC
README
PHP的Protobuf是Google的Protocol Buffers的PHP语言实现,支持其二进制数据序列化,包括一个protoc
插件,用于从.proto
文件生成PHP类。
安装
如果您希望将.proto
定义编译成PHP,您需要通过您喜欢的包管理器或从源代码安装Google的Protocol Buffers。此插件目前支持protobuf 2.3.0或更高版本。
注意:Google的Protocol Buffers和proto
不是protobuf-php/protobuf的运行时要求,如果您希望使用protobuf-php/protobuf-plugin将定义编译成PHP,则有必要。
安装Google的Protocol Buffers
- OSX安装
$ brew install protobuf
- Ubuntu
$ sudo apt-get install -y protobuf
确保用户路径中有protoc
$ protoc --version $ # libprotoc 2.6.1
注意:有关如何安装/编译Google的Protocol Buffers的更多信息,请参阅:https://github.com/google/protobuf
Composer安装
要安装PHP插件,请运行以下composer
命令
$ composer require "protobuf-php/protobuf-plugin"
定义您的协议格式
要创建您的通讯录应用程序,您需要从一个.proto
文件开始。一个.proto
文件中的定义很简单:为每个要序列化的数据结构添加一个消息,然后在消息中指定每个字段的名称和类型。以下是定义您的消息的.proto
文件,即addressbook.proto
。
package tutorial; import "php.proto"; option (php.package) = "Tutorial.AddressBookProtos"; message Person { required string name = 1; required int32 id = 2; optional string email = 3; enum PhoneType { MOBILE = 0; HOME = 1; WORK = 2; } message PhoneNumber { required string number = 1; optional PhoneType type = 2 [default = HOME]; } repeated PhoneNumber phone = 4; } message AddressBook { repeated Person person = 1; }
如您所见,语法类似于C++或Java。让我们逐部分分析文件并了解其功能。一个.proto
文件以包声明开始,这有助于在不同项目之间防止命名冲突。在PHP中,包名用作PHP命名空间,除非您明确指定了(php.package)
,如我们所做的那样。即使您提供了(php.package)
,您仍然应该定义一个正常的包,以避免在Protocol Buffers命名空间以及非PHP语言中发生名称冲突。
您可以在Protocol Buffer语言指南中找到编写.proto
文件的完整指南——包括所有可能的字段类型。不过,不要寻找类似于类继承的功能——protocol buffers不支持这些功能。
编译您的Protocol Buffers
现在您有了.proto
,接下来需要做的事情是生成您需要的类来读取和写入AddressBook
(以及相应的Person
和PhoneNumber
)消息。为此,您需要在对您的.proto
文件运行协议缓冲区插件。
在这种情况下
php ./vendor/bin/protobuf --include-descriptors -i . -o ./src/ ./addressbook.proto
这将生成以下PHP类到您指定的目标目录
src/ └── Tutorial └── AddressBookProtos ├── AddressBook.php ├── Person │ ├── PhoneNumber.php │ └── PhoneType.php └── Person.php
注意:有关如何使用生成的代码的更多信息,请参阅:protobuf-php/protobuf