Зачем нужен Enum в php?
Подскажите зачем нужны пакеты clabs/php-enum, spatie/enum или dbalabka/php-enumeration? В каких случаях их применять?
Ответы (1 шт):
Для возможности работать с константам как с объектами, используется большынстве в ValueObject, к примеру:
Банальный пример - у нас єсть класс User со статусом.
class User
{
private const ACTIVE = 'active';
private const WAIT = 'wait';
private const DELETE = 'delete';
private const ARCHIVE = 'archive';
privat string $status;
public function __construct()
{
$this->status = self::WAIT;
}
public function isActive(): bool
{
return $this->status === self::ACTIVE;
}
public function isWait(): bool
{
return $this->status === self::WAIT;
}
public function isDelete(): bool
{
return $this->status === self::DELETE;
}
public function isArchive(): bool
{
return $this->status === self::ARCHIVE;
}
public function activate(): void
{
$this->status = self::ACTIVE;
}
}
$user = new User();
if (true === $user->isWait()) {
$user->activate();
}
Наш клас разрастается и что не очень хорошо, если можно некоторые компоненты вынести в маленькие детали его сущности. С помощью библиотеки мы можем заделать со статуса EnumType и разгрузить клас User:
class User
{
private Status $status;
public function __construct(): bool
{
$this->status = Status::WAIT();
}
public function activate(): void
{
$this->status = Status::ACTIVE();
}
public function getStatus()
{
return $this->status;
}
}
class Status extends Enum
{
public const ACTIVE = 'active';
public const WAIT = 'wait';
public const DELETE = 'delete';
public const ARCHIVE = 'archive';
public function isActive(): bool
{
retutn $this->is(self::ACTIVE);
}
public function isWait(): bool
{
retutn $this->is(self::WAIT);
}
public function isDelete(): bool
{
retutn $this->is(self::DELETE);
}
public function isArchive(): bool
{
retutn $this->is(self::ARCHIVE);
}
}
$user = new User();
if (true === $user->getStatus()->isWait()) {
$user->activate();
}
И откуда уже можно и получать списки всех констант для проверки и тд. Я собственно использую єту библиотеку но в связке с датамапером, к примеру как вод тут, в зависимости какой фреймвор, и что он может предложить. Суть в общем в том, чтобы работать с константным значениям как с объектом. Надеюсь я ответил на ваш вопрос.