Releases: reinder83/binary-flags
Releases · reinder83/binary-flags
Drop PHP 8.2, Deprecate floats, Add enums
Release Notes - v2.1.0
Added
- New enum-backed API:
BinaryEnumFlagsTraits\InteractsWithEnumFlagsFlagenum andMaskvalue object
- Enum-backed flags now return a
Maskobject fromgetMask(). - New
getMaskValue(): intmethod for enum-backed flags to persist/interoperate with integer masks. - Deprecation warnings for passing
floatvalues as masks/flags. - README migration notice for the upcoming
v3.0.0integer-only API. UPGRADE-v3.mdwith migration instructions.- New primary numeric trait:
Traits\InteractsWithNumericFlags. Traits\BinaryFlagsis now deprecated and kept for backward compatibility.
Deprecated
- Passing
floatto BinaryFlags mask/flag methods is deprecated inv2.1.0. - Float support will be removed in
v3.0.0. Bits::BIT_64will be removed inv3.0.0.
BIT_64 Notice
Bits::BIT_64 is being removed because PHP numbers for bitwise flags are signed. The 64th bit is the sign bit, so it cannot be used reliably as a normal flag.
Using integer-compatible bits avoids these issues.
Migration Recommendation
Cast external/legacy mask and flag values to int before calling BinaryFlags methods.
$flags->setMask((int) $mask);
$flags->addFlag((int) $flag);Enum Migration Example
// Before: numeric PermissionFlags
class PermissionFlags extends BinaryFlags
{
public const CAN_VIEW = Bits::BIT_1;
public const CAN_BOOK = Bits::BIT_2;
}
$flags = new PermissionFlags($storedMask);
$flags->addFlag(PermissionFlags::CAN_VIEW | PermissionFlags::CAN_BOOK);
$storedMask = $flags->getMask();
// After: enum-backed PermissionFlags
enum Permission: int
{
case CanView = Bits::BIT_1;
case CanBook = Bits::BIT_2;
}
class PermissionFlags extends BinaryEnumFlags
{
protected static function getFlagEnumClass(): string
{
return Permission::class;
}
}
$flags = new PermissionFlags(Mask::fromInt($storedMask, Permission::class));
$flags->addFlag(Permission::CanView);
$flags->addFlag(Permission::CanBook);
$storedMask = $flags->getMaskValue();Drop PHP 8.0 and add better support for newer PHP versions
What's Changed
- fix php8.4 deprecation by @ovgray in #13
- Deprecate 8.0 and tests for PHP 8.3, 8.4 & 8.5 by @reinder83 in #14
New Contributors
Full Changelog: v2.0...v2.0.1
Maintenance release PHP 8+
Drop support for older PHP versions, better support for PHP 8+ and typehinting
Minor fixes
- Moved
$currentPosvariable from trait to abstract class - Update readme
Move interfaces from trait to abstract
- Moved the countable, iteratable and jsonserializable methods to the abstract method, so it doesn't interfere with other classes that use the trait instead of extending from the abstract class.
- Update Eloquent model example in readme
Add iterable, countable, and jsonSerializable
This release makes it possible iterate over the set flags, do a count() to return the number of set flags and add support to json_encode the BinaryFlags object
Add static methods
Add static method getAllFlags
Add static method getAllFlagsMask
checkAnyFlag
- Added checkAnyFlag method
- Minor readme updates
Final release
Updated unittests to have 100% code completion.
Version 0.5
Updated readme and Bits notation