tp6 使用 ProtoBuf

本文介绍了如何在不使用C扩展的情况下,在PHP中通过Protobuf进行消息类型的定义、编译及序列化和反序列化的操作。首先,下载并安装protoc脚本,编写.proto文件定义Person消息类型,然后执行脚本生成PHP类库。接着,通过Composer安装protobuf扩展,并在PHP中使用生成的类库进行数据的序列化和反序列化。整个过程详细阐述了每个步骤,适合对PHP和Protobuf有兴趣的开发者参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下为无需c扩展版本

官网下载protoc脚本

window下下载win32或者win64版本,mac下载osx版本

解压后得到文件夹(以mac为例)protoc-21.4-osx-x86_64,可运行的脚本protoc在bin文件夹下

编写proto消息类型,保存为person.proto

syntax="proto3";
package proto;
message Person{
    string name=1;
    int32  age=2;
}

执行脚本,生成类库

protoc --php_out=protobuf/compile --proto_path=protobuf/proto protobuf/proto/*.proto
# 第一个路径为 生成文件的位置及编译成哪种语言,第二个为存储proto文件的位置,第三个表示当前文件下所有proto文件
# proto文件需要在同一目录下,不能在子文件夹下

执行后生成文件

GPBMetadata/Person.php
Proto/Person.php
在php中使用

当前项目下安装依赖扩展,安装composer依赖扩展

composer require google/protobuf

注意国内镜像可能下载失败,可以将镜像改为 https://repo.packagist.org 后重新执行

序列化

......
use GPBMetadata/Person;
use Proto/Person;
......
$person = new Person();
$person->setName("张三");
$person->setAge(27);
$data = $person->serializeToString();
......

反序列化

......
use GPBMetadata/Person;
use Proto/Person;
......
$data = $this->request->param('protodata');
$person = new Person();
$person->mergeFromString($data);
$person->getName();
$person->getAge();
......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值