我正在尝试使用https://github.com/google/protobuf/tree/master/php在PHP中学习Protobuf。目前我遇到了错误。
我安装protobuf的步骤:
使用命令:
通过pecl安装protobufsudo pecl install protobuf-3.2.0a1
如下所示设置composer.json,然后运行sudo composer install
{
"require": {
"google/protobuf": "^3.2"
}
}
以下是我的代码:
原型文件:
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
之后,我在生成的PHP文件中添加了require_once __DIR__ . '/vendor/autoload.php';
和require_once __DIR__ . '/GPBMetadata/MsgFormat.php';
,因为当我运行php APIReq.php
时,它提出了
PHP Fatal error: Class 'Google\Protobuf\Internal\Message' 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,结果相同。
答案 0 :(得分:2)
编码&amp;我跟踪时,代码库中不存在解码。
此更改已在3.3.0中引入
//to encode message
$data = $param->serializeToString();
//to decode message
$param2 = new APIReq();
$param2->mergeFromString($data);