clue / qdatastream
轻量级的PHP库,允许与Qt程序(QDataStream)交换二进制数据
Requires
- php: >=5.3
Requires (Dev)
- phpunit/phpunit: ^6.0 || ^5.7 || ^4.8.35
Suggests
- ext-mbstring: Used for converting character encodings for QString and QChar
README
轻量级的PHP库,允许与Qt程序(QDataStream)交换二进制数据
目录
用法
作者
使用 Writer
类可以从您写入的结构化数据构建二进制缓冲区字符串。
$user = new stdClass; $user->id = 10; $user->active = true; $user->name = 'Alice'; $writer = new Writer(); $writer->writeUInt($user->id); $writer->writeBool($user->active); $writer->writeQString($user->name); $data = (string)$writer file_put_contents('user.dat', $data);
有关更多详细信息,请参阅类概述。
读取器
使用 Reader
类可以读取二进制缓冲区字符串中的数据。
$data = file_get_contents('user.dat'); $reader = new Reader($data); $user = new stdClass(); $user->id = $reader->readUInt(); $user->active = $reader->readBool(); $user->name = $reader->readQString();
有关更多详细信息,请参阅类概述。
QVariant
使用 QVariant
类可以封装任何类型的数据,并具有显式的数据类型。当将 QVariant
写入缓冲区时,它还会包括其数据类型,以便在读取时可以自动完成,而无需事先知道数据类型。
$variant = new QVariant(100, Types::TYPE_USHORT); $writer = new Writer(); $writer->writeQVariant($variant); $data = (string)$writer; $reader = new Reader($data); $value = $reader->readQVariant(); assert($value === 100);
此外,您可以使用 writeQVariant()
方法而无需事先指定数据类型,并让此类“猜测”适合序列化的适当数据类型,并将此类型信息添加到序列化数据中。这类似于JSON编码,并接受类型为 int
、bool
、string
、null
以及嵌套结构或类型为 array
或 stdClass
的实例的原始值。
$rows = [ (object)[ 'id' => 10, 'name' => 'Alice', 'active' => true, 'groups' => ['admin', 'staff'] ] ]; $writer = new Writer(); $writer->writeQVariant($rows); $data = (string)$writer; $reader = new Reader($data); $values = $reader->readQVariant(); assert(count($values) === 1); assert($values[0]->id === 10); assert($values[0]->groups[0] === 'admin');
请注意,关联数组或 stdClass
对象将序列化为“映射”,而向量数组将序列化为“列表”。为了避免混淆这些类似的数据结构,在此项目中使用 stdClass
实例被认为是首选方法。
有关更多详细信息,请参阅类概述。
类型
存在 Types
类是为了与不同的数据类型一起工作,并提供了一些公共常量,用于处理显式数据类型,否则主要用于内部。
有关更多详细信息,请参阅类概述。
安装
建议使用 Composer 安装此库。 新到Composer?
这将安装最新支持的版本
$ composer require clue/qdatastream:^0.8
有关版本升级的详细信息,请参阅变更日志。
此项目旨在在任何平台上运行,因此不需要任何PHP扩展,并支持在旧版PHP 5.3通过当前PHP 8+上运行。 强烈建议为此项目使用PHP 7+。
QString
和 QChar
类型使用 ext-mbstring
在不同字符编码之间进行转换。如果此扩展不存在,则此库将使用略微较慢的正则表达式绕道工作,但应同样有效。强烈建议安装 ext-mbstring
。
测试
要运行测试套件,您首先需要克隆此存储库,然后通过 Composer 安装所有依赖项
$ composer install
要运行测试套件,请转到项目根目录并运行
$ php vendor/bin/phpunit
许可
本项目遵循宽松的MIT许可协议。
你知道吗?我提供定制开发服务,并可以为发布赞助和贡献开具发票。请联系我(@clue)了解详情。