liues1992/php-protobuf-generator

PHP 的 Google protobuf 生成器

v0.1.7 2018-12-11 03:08 UTC

This package is not auto-updated.

Last update: 2024-09-12 03:38:41 UTC


README

简介

使用 PHP 生成 protobuf 代码: ./protoc-gen.php -o build tests/test3.proto

生成的消息代码旨在与 Google protobuf 的官方 PHP 实现一起工作: https://github.com/google/protobuf/tree/master/php

生成的服务客户端代码旨在与 gRpc https://grpc.org.cn/docs/quickstart/php.html#prerequisites 一起工作

要求

  • Unix/Linux 系统
  • PHP >= 7.0 且已安装 composer
  • 仅支持 proto3 语法 proto 文件
  • 已安装 protoc,版本 >= 3.5

使用方法

  • composer require liues1992/php-protobuf-generator

  • ./vendor/bin/protoc-gen.php --out=build --grpc_out=build tests/*.proto 或直接作为插件使用

    protoc --php-custom_out=build --plugin=protoc-gen-php-custom=./vendor/bin/protoc-gen-plugin.php \ --grpc-php_out=build --plugin=protoc-gen-grpc-php=./vendor/bin/protoc-gen-grpc-plugin.php tests/*.proto

  • 请参阅 示例 文件夹以获取生成的代码

运行测试

composer test

待办事项

  • 更多测试用例
  • 打包为 phar
  • 支持 proto2
  • 自定义生成器支持(通过 require 此包编写自己的代码生成器)

为什么需要这个而不是 Google 的默认实现?

  • 有时您希望自定义生成的代码,如果修改 google/protobuf 源代码(C++)并重新编译 protoc 二进制文件,这将是复杂的。考虑上述情况
    • 在消息类中添加便利方法。
    • 支持 proto2
    • 生成自定义 rpc 代码(如果您不使用 gRpc 或希望将其用于 PHP 服务器端)
  • Google 生成的代码中存在一些错误。
    public function setEnum($var)
    {
        // GPBUtil::checkEnum accepts only on param
        GPBUtil::checkEnum($var, \Gary\Test\Foo_Enum::class); 
        $this->enum = $var;
        
        return $this;
    }
  • 用 PHP 生成 PHP 代码很酷(易于 PHP 开发者参与)。

它是如何工作的

这是个秘密。自己去发现吧。