PHP protobuf 错误 - encode/decode 的未定义方法
PHP protobuf error - Undefined method for encode/decode
我正在尝试使用 https://github.com/google/protobuf/tree/master/php 在 PHP 中了解 Protobuf。目前我陷入了一个错误。
我安装protobuf的步骤:
使用命令通过 pecl 安装 protobuf:
sudo 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 Class 的命令:
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时,它returns错误信息:
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);
我正在尝试使用 https://github.com/google/protobuf/tree/master/php 在 PHP 中了解 Protobuf。目前我陷入了一个错误。
我安装protobuf的步骤:
使用命令通过 pecl 安装 protobuf:
sudo 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 Class 的命令:
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时,它returns错误信息:
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);