1.php安装protobuf3
安装过程就不详细说明,请自行百度或参考以下文档。 参考: 安装https://github.com/protocolbuffers/protobuf/tree/master/php 官网参考文档:https://developers.google.com/protocol-buffers/docs/reference/php-generated?hl=zh-cn
1.Messages person.proto文件
syntax = "proto3";
package test;
message Person {
string name = 1;
int32 id = 2;
string email = 3;
}
执行protoc --php_out=. person.proto生成php类。类的使用:
<?php
require_once 'vendor/autoload.php';
require_once 'Test/Person.php';
require_once 'GPBMetadata/Person.php';
$data=[
'name'=>'xdf',
'id'=>1,
'email'=>'dfjj@dfj.com',
];
$persion=new \Test\Person($data);
$res=$persion->serializeToString();
var_export($res);
$obj=new \Test\Person();
$obj->mergeFromString($res);
echo "\n";
var_export($obj->getName());
2 嵌套Messages person.proto文件
syntax = "proto3";
package test;
message Person {
string name = 1;
int32 id = 2;
string email = 3;
info info_msg = 4;
message info{
string phone = 1;
string address = 2;
int32 age = 3;
}
}
再执行protoc --php_out=. person.proto重新生成php类。类的使用:
<?php
require_once 'vendor/autoload.php';
require_once 'Test/Person.php';
require_once 'Test/Person/info.php';
require_once 'GPBMetadata/Person.php';
$info=[
'phone'=>'123456',
'address'=>'xxxxxxx',
'age'=>25
];
$data=[
'name'=>'xdf',
'id'=>1,
'email'=>'dfjj@dfj.com',
'info_msg'=>new \Test\Person\info($info)
];
$persion=new \Test\Person($data);
$res=$persion->serializeToString();
var_export($res);
$obj=new \Test\Person();
$obj->mergeFromString($res);
echo "\n";
var_export($obj->getName());
echo "\n";
var_export($obj->getInfoMsg()->getPhone());
3.Repeated 序列化带未知长度列表的数据 person.proto文件
syntax = "proto3";
package test;
message Person {
string name = 1;
int32 id = 2;
string email = 3;
repeated info info_msg = 4;
message info{
string phone = 1;
string address = 2;
int32 age = 3;
}
}
再执行protoc --php_out=. person.proto重新生成php类。类的使用:
<?php
require_once 'vendor/autoload.php';
require_once 'Test/Person.php';
require_once 'Test/Person/info.php';
require_once 'GPBMetadata/Person.php';
$info=[
'phone'=>'123456',
'address'=>'xxxxxxx',
'age'=>25
];
$data=[
'name'=>'xdf',
'id'=>1,
'email'=>'dfjj@dfj.com',
'info_msg'=>[new \Test\Person\info($info),new \Test\Person\info($info)]
];
$persion=new \Test\Person($data);
$res=$persion->serializeToString();
var_export($res);
$obj=new \Test\Person();
$obj->mergeFromString($res);
echo "\n";
var_export($obj->getName());
echo "\n";
var_export($obj->getInfoMsg()->count());
var_export($obj->getInfoMsg()[0]->getAddress());
|