私はhttps://github.com/google/protobuf/tree/master/phpを使ってPHPのProtobufについて学んでいます。現在、私は間違いで立ち往生しています。PHP protobufのエラー - エンコード/デコードのための未定義のメソッド
はコマンドでPECLているProtobufをインストールします:
私の手順はいる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クラスを生成する:protocコマンドは2になった
protoc --php_out=/var/www/html/ MsgFormat.proto
ファイル、APIReq.php、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ファイルにrequire_once __DIR__ . '/vendor/autoload.php';
とrequire_once __DIR__ . '/GPBMetadata/MsgFormat.php';
を追加し、エラーが消えたので、私は両方のラインが問題を固定と仮定
私の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でこれと同じ結果を試してみてください。