jordanbrauer/un-stow

该软件包最新版本(dev-master)没有提供许可证信息。

提供PHP的`pack`和`unpack`函数的优雅且强大的OOP和/或FP接口。

dev-master 2019-10-14 21:28 UTC

This package is auto-updated.

Last update: 2024-09-19 01:57:20 UTC


README

提供PHP的packunpack函数的优雅且强大的OOP和/或FP接口。

安装

使用Composer安装

$ composer require jordanbrauer/un-stow

示例

以下是一些如何使用此库的基本示例。

Hello World

简单的"Hello World!"示例,用于打包(stow)和解包(unstow)十六进制数据。

stow('48656C6C6F20576F726C6421')->hexNibbleHigh('*')->close();
# = (string) Hello World!

unstow('Hello World!')->hexNibbleHigh('*', 'hello_world')->open();
# = (array) [
#     'hello_world' => 48656C6C6F20576F726C6421,
# ],

GIF Header

尽管我们现在有其他检查GIF图像数据的方法,但这可以作为使用unstow解包二进制数据以读取标题的示例。

$stream = fopen('./tests/Portal.gif', 'rb');
$bytes = fread($stream, 20);

fclose($stream);

$gifHeader = unstow($bytes)
    ->spacePaddedString(6, 'version')
    ->unsignedChar(2, 'width')
    ->unsignedChar(2, 'height')
    ->unsignedChar(1, 'flag')
    ->nullFill(11)
    ->unsignedChar(1, 'aspect')
    ->open();

重用打包器

使用此库,您可以创建具有预定义模式和可以接受任意数据进行打包/解包的"模板"打包器和解包器。

面向对象方法

为了以面向对象的方式重用打包器,只需在构造函数中省略字节,并将格式方法调用链式调用以创建模式。然后,您可以传递任意数据到load方法,并调用close/open来根据格式处理数据。

例如。,

$packer = stow()
    ->unsignedShort('', Stow::BIG_ENDIAN_16_BIT)
    ->unsignedShort('', Stow::LITTLE_ENDIAN_16_BIT)
    ->signedChar('*');

echo $packer->load(0x1234, 0x5678, 65, 66)->close();

函数式方法

函数式方法与面向对象方法非常相似,但有细微差别。

  1. 在链式调用所有格式方法调用后,通过调用standby方法完成。
    • 此方法将返回一个闭包,该闭包接受一组任意数据的可变参数。
  2. 无需调用open/close方法:闭包直接返回打包/解包的数据!

例如。,

$packer = stow()
    ->unsignedShort('', Stow::BIG_ENDIAN_16_BIT)
    ->unsignedShort('', Stow::LITTLE_ENDIAN_16_BIT)
    ->signedChar('*')
    ->standby();

echo $packer(0x1234, 0x5678, 65, 66);