Часто ли вам приходилось сожалето о том, что в PHP нет перечислений как таковых?
Да, кто-то обходился конвенцией именования и получалось нечто вроде:
define( 'COLOR_RED', 'F00' );
define( 'COLOR_GREEN', '0F0' );
define( 'COLOR_BLUE', '00F' );
Или нечто вроде:
// данную переменную ЗАПРЕЩЕНО модифицировать
$colors = array(
'red' => 'F00',
'green' => '0F0',
'blue' => '00F',
);
Но оба подхода имеют существенные недостатки:
- В первом случае члены перечисления не образуют явной группировки
- Во втором случае есть риск что переменная будет изменена
- И в обоих этих случаях мы не можем делать проверку на тип переменной (type hinting)
Под катом предлагаю решение без вышеописанных недостатков…
(more…)