未定义的编码/解码方法
我试图通过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