先参考这篇博客:
https://blog.csdn.net/BraveMelon/article/details/82560845
vim cbstest.proto 内容如下
syntax = "proto2";
package Proto.Cbstest;
message Person {
required string name = 1;
required int32 id = 2;
optional string email = 3;
optional double money = 4;
}
说明:
syntax :指定语法
package :会生成对应的文件夹,并且以package的值生成namespace message :一个message会生成对应的一个文件,每个文件的名称就以message的名称生成,
其他相关参考 : https://developers.google.com/protocol-buffers/
运行命令:
./php-protobuf/protoc-gen-php.php cbstest.proto
会生成一个文件
class Person extends \ProtobufMessage
{
/* Field index constants */
const NAME = 1;
const ID = 2;
const EMAIL = 3;
const MONEY = 4;
/* @var array Field descriptors */
protected static $fields = array(
self::NAME => array(
'name' => 'name',
'required' => true,
'type' => \ProtobufMessage::PB_TYPE_STRING,
),
self::ID => array(
'name' => 'id',
'required' => true,
'type' => \ProtobufMessage::PB_TYPE_INT,
),
self::EMAIL => array(
'name' => 'email',
'required' => false,
'type' => \ProtobufMessage::PB_TYPE_STRING,
),
self::MONEY => array(
'name' => 'money',
'required' => false,
'type' => \ProtobufMessage::PB_TYPE_DOUBLE,
),
);
/**
* Constructs new message container and clears its internal state
*/
public function __construct()
{
$this->reset();
}
/**
* Clears message values and sets default ones
*
* @return null
*/
public function reset()
{
$this->values[self::NAME] = null;
$this->values[self::ID] = null;
$this->values[self::EMAIL] = null;
$this->values[self::MONEY] = null;
}
/**
* Returns field descriptors
*
* @return array
*/
public function fields()
{
return self::$fields;
}
/**
* Sets value of 'name' property
*
* @param string $value Property value
*
* @return null
*/
public function setName($value)
{
return $this->set(self::NAME, $value);
}
/**
* Returns value of 'name' property
*
* @return string
*/
public function getName()
{
$value = $this->get(self::NAME);
return $value === null ? (string)$value : $value;
}
/**
* Sets value of 'id' property
*
* @param integer $value Property value
*
* @return null
*/
public function setId($value)
{
return $this->set(self::ID, $value);
}
/**
* Returns value of 'id' property
*
* @return integer
*/
public function getId()
{
$value = $this->get(self::ID);
return $value === null ? (integer)$value : $value;
}
/**
* Sets value of 'email' property
*
* @param string $value Property value
*
* @return null
*/
public function setEmail($value)
{
return $this->set(self::EMAIL, $value);
}
/**
* Returns value of 'email' property
*
* @return string
*/
public function getEmail()
{
$value = $this->get(self::EMAIL);
return $value === null ? (string)$value : $value;
}
/**
* Sets value of 'money' property
*
* @param double $value Property value
*
* @return null
*/
public function setMoney($value)
{
return $this->set(self::MONEY, $value);
}
/**
* Returns value of 'money' property
*
* @return double
*/
public function getMoney()
{
$value = $this->get(self::MONEY);
return $value === null ? (double)$value : $value;
}
}
$protoData = '';
$name = 0;
$object = '';
$object = new Person();
$object->setId(28);
$object->setName('ltstudy');
$object->setEmail('[email protected]');
$object->setMoney('200000');
//加密
$protoData = $object->serializeToString();
//var_dump($protoData);die;
//解密
$deObject = new Person();
$deProtoData = $deObject->parseFromString($protoData);
$deId = $deObject->getId();
$deName = $deObject->getName();
var_dump($deId, $deName);