2017-05-03 13 views
1

私は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でこれと同じ結果を試してみてください。

答えて

1

エンコード&私がトレースしたとき、コードベースにデコードが存在しません。

この変更は、3.3.0

//to encode message 
$data = $param->serializeToString(); 

//to decode message 
$param2 = new APIReq(); 
$param2->mergeFromString($data); 
で導入されました