yaroslavche / bitmask
BitMask, EnumBitMask
v3.0.2
2024-06-21 07:43 UTC
Requires
- php: ^8.1
Requires (Dev)
README
BitMask
PHP库,用于处理位掩码值
入门指南
通常足以检查位
define('READ', 1 << 0); define('WRITE', 1 << 1); define('EXECUTE', 1 << 2); $mask = READ | WRITE | EXECUTE; echo sprintf('mask: %d', $mask); // mask: 7 if ($mask & READ) {} // if $mask has a single bit READ $mask &= ~EXECUTE; // remove a single bit from the $mask $mask |= EXECUTE; // set a single bit to the $mask
但你可以尝试使用本包的另一种方式
use BitMask\BitMask; // two arguments: integer mask (default: 0) and most significant bit for boundaries (default: null) $bitmask = new BitMask(READ | WRITE | EXECUTE); echo sprintf('mask: %d', $bitmask->get()); // mask: 7 if ($bitmask->has(READ)) {} $bitmask->remove(EXECUTE); $bitmask->set(EXECUTE);
存在 EnumBitMask,允许使用PHP枚举
use BitMask\EnumBitMask; enum Permissions { case READ; case WRITE; case EXECUTE; } // two arguments: required enum class-string and integer mask (default: 0) $bitmask = new EnumBitMask(Permissions::class, 0b111); echo sprintf('mask: %d', $bitmask->get()); // mask: 7 if ($bitmask->has(Permissions::READ)) {} $bitmask->remove(Permissions::EXECUTE); $bitmask->set(Permissions::EXECUTE); $bitmask->set(Unknown::Case); // throws an exception, only Permissions cases available
EnumBitMask
有工厂方法
# Create a bit mask using one or multiple enum cases $bitmask = EnumBitMask::create(Permissions::class, Permissions::EXECUTE); # Create a bit mask using all enum cases $bitmask = EnumBitMask::all(Permissions::class); # Create a bit mask with no flags on (equivalent to create with no additional flags) $bitmask = EnumBitMask::none(Permissions::class); # Create a bit mask without specific flags $bitmask = EnumBitMask::without(Permissions::class, Permissions::EXECUTE);
存在 Bits 辅助类,具有静态方法
use BitMask\Util\Bits; $mask = 7; // 1 << 0 | 1 << 1 | 1 << 2 $integerMostSignificantBit = Bits::getMostSignificantBit($mask); // int 2 $arraySetBitsIndexes = Bits::getSetBitsIndexes($mask); // array:3 [0, 1, 2] $arraySetBits = Bits::getSetBits($mask); // array:3 [1, 2, 4] $string = Bits::toString($mask); // string "111" $integerBit = Bits::indexToBit(16); // int 65536 $integerIndex = Bits::bitToIndex(65536); // int 16 $boolIsSingleBit = Bits::isSingleBit(8); // true
安装
通过 composer 安装包
composer require yaroslavche/bitmask
贡献
欢迎fork或贡献 =)
CI构建
$ composer ci:pack
测试
PHPUnit
$ composer phpunit $ ./vendor/bin/phpunit
Infection
$ composer infection $ ./vendor/bin/infection --min-msi=100 --min-covered-msi=100
基准测试
$ composer phpbench $ ./vendor/bin/phpbench run benchmarks --report=default
静态分析器和代码风格
PHPStan
$ composer phpstan $ ./vendor/bin/phpstan analyse src/ -c phpstan.neon --level=9 --no-progress -vvv --memory-limit=1024M
Psalm
$ composer psalm $ ./vendor/bin/psalm
PHP-CS
代码风格检查
$ composer phpcs-check $ ./vendor/bin/php-cs-fixer check --diff
代码风格修复
$ composer phpcs-fix $ ./vendor/bin/php-cs-fixer fix
许可证
本项目采用MIT许可证 - 有关详细信息,请参阅LICENSE文件