Protobuf 实践小Demo二

先参考这篇博客:

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);

猜你喜欢

转载自blog.csdn.net/ltstud/article/details/83784987