La enumeración (o enum) se usa principalmente para asignar nombres a constantes integrales, los nombres hacen que un programa sea fácil de leer y mantener. En PHP, los tipos de datos de enumeración se pueden implementar usando y extendiendo clases abstractas.
Enfoque 1: uso de una clase abstracta simple para la encapsulación de miembros de datos.
Ejemplo:
<?php // PHP program to show use of enumerations // Encapsulating constants abstract class gfg { const dummy_string = "geeksforgeeks"; const dummy_int = 1; const dummy_array = array('a' => 1, 'b' => 2); } $a = gfg::dummy_string; $b = gfg::dummy_int; $c = gfg::dummy_array; var_dump($a); var_dump($b); var_dump($c); ?>
string(13) "geeksforgeeks" int(1) array(2) { ["a"]=> int(1) ["b"]=> int(2) }
Enfoque 2: extender una clase abstracta que actúe como un contenedor de enumeración para encapsular constantes.
Ejemplo:
<?php // PHP program to show use of enumerations // Base enumeration class abstract class enum { // Enumeration constructor final public function __construct($value) { $this->value = $value; } // String representation final public function __toString() { return $this->value; } } // Encapsulating enumerated constants class gfg extends enum { const dummy_string = "geeksforgeeks"; const dummy_int = 1; const dummy_array = array('a' => 1, 'b' => 2); } $a = new gfg(gfg::dummy_string); $b = new gfg(gfg::dummy_int); $c = new gfg(gfg::dummy_array); var_dump($a); var_dump($b); var_dump($c); ?>
object(gfg)#1 (1) { ["value"]=> string(13) "geeksforgeeks" } object(gfg)#2 (1) { ["value"]=> int(1) } object(gfg)#3 (1) { ["value"]=> array(2) { ["a"]=> int(1) ["b"]=> int(2) } }
Enfoque 3: la enumeración mencionada en el enfoque anterior se puede especializar agregando controles de validez y manejo de excepciones para un uso más flexible del tipo de datos de enumeración.
Ejemplo:
<?php // PHP program to show use of enumerations // Base enumeration class abstract class enum { // Enumeration constructor final public function __construct($value) { try { $c = new ReflectionClass($this); // Content validation if(!in_array($value, $c->getConstants())) { try { throw new Exception("IllegalArgumentException"); } catch (Exception $k) { echo $k->getMessage(); } } $this->value = $value; } catch (Exception $k){ echo $k->getMessage(); } } // String representation final public function __toString() { return $this->value; } } // Encapsulating enumerated constants class gfg extends enum { const dummy_string = "geeksforgeeks"; const dummy_int = 1; const dummy_array = array('a' => 1, 'b' => 2); } $a = new gfg(gfg::dummy_string); $b = new gfg(gfg::dummy_int); $c = new gfg(gfg::dummy_array); $d = new gfg(3.14); var_dump($a); var_dump($b); var_dump($c); var_dump($d); ?>
IllegalArgumentExceptionobject(gfg)#1 (1) { ["value"]=> string(13) "geeksforgeeks" } object(gfg)#2 (1) { ["value"]=> int(1) } object(gfg)#3 (1) { ["value"]=> array(2) { ["a"]=> int(1) ["b"]=> int(2) } } object(gfg)#4 (1) { ["value"]=> float(3.14) }
Nota: PHP tiene la clase SplEnum que se puede usar para enumeraciones, aunque la implementación no está disponible en todas las versiones estables de PHP.
Publicación traducida automáticamente
Artículo escrito por Harshit Saini y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA