1. Go to this page and download the library: Download framjet/enum-bitmask library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
framjet / enum-bitmask example snippets
use FramJet\Packages\EnumBitmask\BitmaskFunctionality;
enum Flag: int
{
use BitmaskFunctionality;
case Public = 0b000001;
case Protected = 0b000010;
case Private = 0b000100;
case ReadOnly = 0b001000;
case Static = 0b010000;
case Final = 0b100000;
}
class Member
{
public function __construct(private int $flags = 0)
{
}
public function setPublic(): void
{
$this->flags = Flag::set(
Flag::clear($this->flags, Flag::Private, Flag::Protected),
Flag::Public
);
}
public function isPublic(): bool
{
return Flag::on($this->flags, Flag::Public);
}
public function isReadOnly(): bool
{
return Flag::on($this->flags, Flag::ReadOnly);
}
/** @return list<Flag> */
public function getFlags(): array
{
return Flag::parse($this->flags);
}
public function getFlagsValue(): int
{
return $this->flags;
}
}
class Container
{
/** @param list<Member> $members */
public function __construct(private array $members = [])
{
}
public function addMember(Member $member): void
{
$this->members[] = $member;
}
public function getMembers(Flag ...$flags): array
{
return array_filter($this->members, static fn(Member $m) => Flag::any($m->getFlagsValue(), ...$flags));
}
}
$memberPublic = new Member();
$memberPublic->setPublic();
$memberPublic->getFlags(); // [Flag::Public]
$memberReadOnly = new Member(Flag::build(Flag::ReadOnly));
$memberReadOnly->isReadOnly(); // true
$memberReadOnly->isPublic(); // false
$memberPrivate = new Member(Flag::build(Flag::Private, Flag::ReadOnly));
$memberPrivate->isReadOnly(); // true
$memberPrivate->isPublic(); // false
$memberPrivate->getFlags(); // [Flag::Private, Flag::ReadOnly]
array_map(
static fn(Flag $f) => $f->toString(),
$memberPrivate->getFlags()
); // ['0b0000_0000_0000_0000_0000_0000_0000_0100', '0b0000_0000_0000_0000_0000_0000_0000_1000']
$container = new Container();
$container->addMember($memberPublic);
$container->addMember($memberReadOnly);
$container->addMember($memberPrivate);
$container->getMembers(); // [$memberPublic, $memberReadOnly, $memberPrivate]
$container->getMembers(Flag::Public); // [$memberPublic]
$container->getMembers(Flag::ReadOnly); // [$memberReadOnly, $memberPrivate]
$container->getMembers(Flag::ReadOnly, Flag::Public); // [$memberPublic, $memberReadOnly, $memberPrivate]
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.