未定义的编码/解码方法

我试图通过https://github.com/google/protobuf/tree/master/php了解Protobuf。 目前我陷入了一个错误。

我的步骤来安装protobuf:

  • 使用命令通过pecl安装protobuf:

    sudo pecl install protobuf-3.2.0a1
    
  • 如下所示设置composer.json,然后运行sudo composer install

    {
        "require": {
            "google/protobuf": "^3.2"
        }
    }
    
  • 以下是我的代码:

  • Proto文件:

    syntax = "proto3";
    
    message APIReq {
        string functionName = 1;
        string name = 2;
        int32 time = 3;
        string type = 4;
    }
    
  • 从.proto文件生成PHP类的命令:

    protoc --php_out=/var/www/html/ MsgFormat.proto
    
  • protoc命令产生两个文件,APIReq.php和GPBMetadata / MsgFormat.php

    之后,我添加了require_once __DIR__ . '/vendor/autoload.php'; require_once __DIR__ . '/vendor/autoload.php';require_once __DIR__ . '/GPBMetadata/MsgFormat.php'; require_once __DIR__ . '/GPBMetadata/MsgFormat.php'; 在生成的PHP文件中,因为当我运行php APIReq.php它提出了

        PHP Fatal error:  Class 'GoogleProtobufInternalMessage' not found in /var/www/html/testing/APIReq.php on line 13
    

    在我添加这些行后,错误消失了,所以我假设两行都修复了这个问题

  • 我的PHP文件(以下示例来自https://developers.google.com/protocol-buffers/docs/reference/php-generated,部分消息):

    <?php
        require __DIR__ . '/vendor/autoload.php';
        include_once('APIReq.php');
    
        $param = new APIReq();
        $param2 = new APIReq();
        $param->setFunctionname('functionname');
        $param->setName('name');
        $param->setTime(123456);
        $param->setType('type');
        $dt = $param->encode();
        $param2->decode($dt);
    ?>
    
  • 当我运行PHP代码时,它会返回错误消息:

    PHP Fatal error:  Call to undefined method APIReq::encode()
    

    我怎样才能解决这个问题?

    编辑:尝试与protobuf 3.3.0以及相同的结果。


    编码和解码不存在于代码库中,我追查下来。

    此更改在3.3.0中引入

    //to encode message 
    $data = $param->serializeToString();
    
    //to decode message
    $param2 = new APIReq();
    $param2->mergeFromString($data);
    
    链接地址: http://www.djcxy.com/p/64795.html

    上一篇: Undefined method for encode/decode

    下一篇: Protobuf on Ubuntu not compiling