sepiariver / binliner-php
PHP的二进制序列验证器
Requires
- php: >=7.4
Requires (Dev)
- phpunit/phpunit: ^9.5
This package is auto-updated.
Last update: 2024-09-07 03:52:33 UTC
README
PHP的二进制序列验证器
关于
这是什么?
Binliner类似于一个工厂,用于生成状态机。给定参数$config['size']
,一个实例将拥有有限数量的可能状态,可以使用$config['validation']
参数配置为有效,排除所有其他状态。
isValid()
方法返回一个布尔值:当前状态是否为配置为有效的状态之一,类似于一个接受者。实例可以被强制转换为string
或转换为number
,在这两种情况下都返回状态的相应表示,类似于一个分类器。这个输出可以被映射到另一组值,这些值服务于特定的业务场景——整个实现因此就像一个摩尔机。
通过向$config['validation']
传递一个函数,可以绕过Binliner的确定性行为,引入副作用或任何其他所需的自定义验证逻辑。此时,Binliner的实用性可能会受到质疑,尽管它似乎有助于阐明复杂的条件逻辑。
它不是什么
尽管名称中有垃圾收集,Binliner不是一个垃圾收集工具。它将二进制标志按顺序“排列”,由于它将验证序列与配置的规则进行比较,因此可以说它像Binliner一样“捕获垃圾”。
什么是二进制序列?
它是一系列位,每个位都有0或1的值。它通常用于数据传输、压缩或存储,但也可以用于错误检测和纠正等其他用途。通过使用数字索引数组的隐式排序来封装任意的布尔条件,Binliner可以以更紧凑、但仍透明/可读的方式促进复杂的控制流。
对于简单的控制流,Binliner可能不太合适,但在更复杂的情况下可能会有所帮助。它还允许重用条件状态。
安装
composer require sepiariver/binliner-php
用法
示例
如果鲍勃的年龄小于21岁,则拒绝。如果他的年龄在21到65岁之间,则检查他的驾照,如果无效则拒绝。如果他超过65岁且持有有效驾照,则重新测试。如果他没有通过测试或没有有效驾照,则拒绝。
注意:这个示例无意为年龄歧视辩护
use SepiaRiver\Binliner; class Bob { // define bob }; $bob = new Bob(); $ofAge = ($bob->age > 20); // Postiion 0 in the sequence $needsRetest = ($bob->age > 65); // Position 1 $validLicense = ($bob->license.valid); // Position 2 $passedTest = ($bob->test.results > 60); // Position 3 /** * Truth table * ofAge | needsRetest | validLicense | passedTest * 1 | 0 | 1 | 0 // of age, valid license, test result irrelevant * 1 | 0 | 1 | 1 // of age, valid license, test result irrelevant * 1 | 1 | 1 | 1 // of age, valid license, passed test * * ALL OTHER STATES ARE INVALID */ $config = [ 'size' => 4, 'validation' => ['1010', '1011', '1111'], ]; $binliner = new Binliner( $config, $ofAge, $needsRetest, $validLicense, $passedTest ); if (!$binliner->isValid()) { // Reject throw new Exception('Invalid state!'); } // Just for convenience you can reason about intval((string)$binliner, 2); if ($binliner->toInt() < 12) { // Accept return true; } // The only remaining valid state is '1111' return handlePassedRetest($bob);
更多示例请参阅test/ExamplesTest.php
测试
- 克隆此存储库
composer install
vendor/bin/phpunit