рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдХреЗ рд╕рд╛рде PHP рдореЗрдВ Enum рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди

рдХрднреА-рдХрднреА рдХреЛрдб рдореЗрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди PHP рднрд╛рд╖рд╛ рд╕реНрд╡рдпрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИ (рдЬреИрд╕реЗ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, C #, рдЬрд┐рд╕рдореЗрдВ enum - Enum рдЬреИрд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд╣реЛрддреЗ рд╣реИрдВ)ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХрд╛ рдПрдХ рд░рд╛рд╕реНрддрд╛ рдЕрднреА рднреА рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрдВрдЯрд░рдиреЗрдЯ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдлрд╡рд╛рд╣ рдлреИрд▓рд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдореЗрд░реЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдореИрдВ рдЖрдкрдХреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реВрдВред

рд╕рдорд╕реНрдпрд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдереАред рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдХрдбрд╝рд╛рдИ рд╕реЗ рдЯрд╛рдЗрдк рдХреА рдЧрдИ рд╡рд╕реНрддреБ (рд╡рд░реНрдЧ) рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╢рд░реАрд░ рдореЗрдВ, рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдФрд░ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реНрдерд┐рд░рд╛рдВрдХ (рдЙрд╕реА рд╡рд░реНрдЧ рдХрд╛) рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ:

function test(Data $data) { switch ((string)$data) { case Data::ID: echo 'This is ID' . PHP_EOL; break; case Data::STRING: echo 'This is a STRING' . PHP_EOL; break; } } 


рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ PHP рдЖрдкрдХреЛ рдЪреЗрддрд╛рд╡рдиреА рджреЗрдЧрд╛ рдХрд┐ switch рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╕рднреА рд╡рд░реНрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЕрдореВрд░реНрдд рд╡рд░реНрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╕реНрдерд┐рд░рд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ switch ред

рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рд▓рд┐рдП рдХреЛрдб:

 /** * Base class, witch implements enumeration in child classes. * * PHP version 5 * * @author Andrey Klimenko * @license 2012, Andrey Klimenko * @version 1.0.0 */ abstract class AbstractEnum { /** * @var AbstractEnum Class instance */ protected static $instance = null; /** * @var mixed Value to compare with class constants */ protected static $value; /** * Protected constructor (realize singleton pattern). * * @final */ protected final function __construct() { } /** * Protect from object cloning (realize singleton pattern). * * @final */ protected final function __clone() { } /** * Protect from reconstruct resources that the object may have (realize singleton pattern). * * @final */ protected final function __wakeup() { } /** * Return instance of this object. * * @static * * @param mixed $value Constant value * * @return AbstractEnum */ public static function getInstance($value) { if (self::$instance === null) { self::$instance = new static(); } self::setConstant($value); // Set value of constant return self::$instance; } /** * Prepare to return constant value, given in getInstance() function. * * @return string */ public final function __toString() { return (string)static::$value; } /** * Set constant value. * * @static * * @param mixed $value Constant value * */ protected static function setConstant($value) { $class = new \ReflectionClass(static::$instance); // Get this class reflection $constants = array_flip($class->getConstants()); // Get constants of this object // Check if constant with given value exist if (array_key_exists($value, $constants)) { $constantName = $constants[$value]; static::$value = $class->getConstant($constantName); // Set constant value } else { trigger_error('Class does not have constant with this value: `' . $value . '`', E_USER_ERROR); } } } 


рдЕрдм рд╣рдо рдПрдХ рд╡рд░реНрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд╕рд╛рд░ рд╡рд░реНрдЧ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред рдпрд╣ рд╡рд░реНрдЧ рдПрдХ рдРрд╕рд╛ рд╡рд░реНрдЧ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реНрдерд┐рд░рд╛рдВрдХ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде рд╣рдо рддреБрд▓рдирд╛ рдХрд░реЗрдВрдЧреЗред

 /** * Sample class, witch implement AbstractEnum abstract class. * * PHP version 5 * * @author Andrey Klimenko * @license 2012, Andrey Klimenko * @version 1.0.0 */ class Data extends AbstractEnum { const ID = 1; // First constant const STRING = 2; // Second constant } 


рдЕрдм рд╣рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдЕрдкрдиреА рдХрдХреНрд╖рд╛ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред рдореБрдЦреНрдп рд╕рдорд╕реНрдпрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдХрд╣рд╛, рдЗрд╕рдХреЗ рд▓рд┐рдП рдкрд╛рд░рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рд╕рдЦреНрдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рдереАред рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ рд╡рд░реНрдЧ Data рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

 /** * Test function. * * @param Data $data Class to check value with. * * @return void */ function test(Data $data) { // First - convert object to string switch ((string)$data) { // compare needed values case Data::ID: echo 'This is ID' . PHP_EOL; break; case Data::STRING: echo 'This is a STRING' . PHP_EOL; break; } } 


рдФрд░ рдЕрдВрддрд┐рдо - рд╣рдорд╛рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ:

 for ($i = 1; $i < 3; $i++) { test(Data::getInstance($i)); } 


рд╕рдм рдХреБрдЫ рд╡реИрд╕рд╛ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рд╣рдо рдЪрд╛рд╣рддреЗ рдереЗред рд╡рд╣ рд╕рдм рд╣реИред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рд╕реА рдХреЗ рдХрд╛рдо рдЖрдПрдЧрд╛ред

Source: https://habr.com/ru/post/In173311/


All Articles