подскажите пожалуйста, чем плохо сделать так
class Enum{
public static $view = 'view';
public static $delete = 'delete';
public static $add = 'add';
}
$action = Enum::$view;
echo $action;
почему https://github.com/myclabs/php-enum вот здесь используется абстрактный класс?
Всегда лучше работать с объектами чем со строками(как в вашем случае).
Вот почему:
Доступны все возможности ООП - инкапсуляция, наследование, полиморфизм, а в случае использования класса с публичными статическими свойствами - нет.
При передаче в коде, вы гарантируете, что это именно нужный экземпляр, а не просто строка:
public function getContent(ViewEnum $enum)
VS
public function getContent(string $enum)
Используя это решение вы получаете дополнительную функциональность, например isValid метод который помогает проверить корректность значения. Вы можете унаследоваться и добавить свою функциональность.
Вот примеры нескольких задач для сравнения:
Получить массив всех значений списка:
В вашем случае:
$result = [Enum::$view, Enum::$view, Enum::$view];
В случае php-enum:
$result = Enum::toArray();
Проверить, что пришло корректное значение:
В вашем случае
in_array($value, [Enum::$view, Enum::$delete, Enum::$add]);
В случае php-enum:
$result = Enum::isValid($value);
Проверить, что полученное значение, равняется delete
В вашем случае:
$value === Enum::$delete
В случае php-enum:
$value->equals(Enum::DELETE())
или
$value->isDelete()
если добавить соответствующий метод.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как отменить обновление записи, если валидация не прошла? Допустим нужно отредактировать заказ woocommerce или запись блога, использую такой код:
как из массива со списком расширениями проверить существует ли файл?