define ('COLOR_RED', 'F00'); define ('COLOR_GREEN', '0F0'); define ('COLOR_BLUE', '00F');
// this variable is FORBIDDEN to modify $ colors = array ( 'red' => 'F00', 'green' => '0F0', 'blue' => '00F', );
abstract class Enum { private $ current_val; final public function __construct ($ type) { $ class_name = get_class ($ this); $ type = strtoupper ($ type); if (constant ("{$ class_name} :: {$ type}") === NULL) { throw new Enum_Exception ('Properties'. $ type. 'in the enumeration'. $ class_name. 'not found.'); } $ this-> current_val = constant ("{$ class_name} :: {$ type}"); } final public function __toString () { return $ this-> current_val; } } class Enum_Exception extends Exception {}
class Enum_Colors extends Enum { const RED = 'F00'; const GREEN = '0F0'; const BLUE = '00F'; }
function setColor (Enum_Colors $ color) { echo $ color; } setColor (new Enum_Colors ('GREEN')); // will pass setColor ('0F0'); // won't pass Enum_Colors :: RED == new Enum_Colors ('GREEN'); // FALSE Enum_Colors :: RED == new Enum_Colors ('RED'); // TRUE
public static method asArray() {}
Source: https://habr.com/ru/post/38584/
All Articles