jordanbrauer / un-stow
该软件包最新版本(dev-master)没有提供许可证信息。
提供PHP的`pack`和`unpack`函数的优雅且强大的OOP和/或FP接口。
dev-master
2019-10-14 21:28 UTC
Requires
- php: ^7.1
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.15
- phpunit/phpunit: ^7.5
- symfony/var-dumper: ^3.4
This package is auto-updated.
Last update: 2024-09-19 01:57:20 UTC
README
提供PHP的pack
和unpack
函数的优雅且强大的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();
函数式方法
函数式方法与面向对象方法非常相似,但有细微差别。
- 在链式调用所有格式方法调用后,通过调用
standby
方法完成。- 此方法将返回一个闭包,该闭包接受一组任意数据的可变参数。
- 无需调用
open
/close
方法:闭包直接返回打包/解包的数据!
例如。,
$packer = stow() ->unsignedShort('', Stow::BIG_ENDIAN_16_BIT) ->unsignedShort('', Stow::LITTLE_ENDIAN_16_BIT) ->signedChar('*') ->standby(); echo $packer(0x1234, 0x5678, 65, 66);