Часто приходится иметь дело с определённым набором значений-параметров, которые можно передать какому-либо методу. Многие просто используют для этого строковые значения:
class Rights { function check($role, User $user){ return $user->role == $role; } }
Rights::check('adminisrator', $me);
Как видно из примера выше, ошибиться довольно легко, а вот ошибку найти будет довольно сложно.
Одно из возможных решений — завести псевдо-enum класс Roles:
class Roles { const ADMINISTATOR = 'administrator'; const USER = 'user'; } class Rights { function check($role, User $user){ return $user->role == $role; } }
Теперь вызов метода будет выглядеть так:
Rights::check(Roles::ADMINISTATOR, $me);
В случае описки компилятор нас предупредит.