Cet article vous présentera comment implémenter la fonction d'énumération JAVA en PHP. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.
En itération Après N versions, la bibliothèque d'énumération PHP php-enum
qui est très similaire à la définition et à l'utilisation de l'énumération Java est enfin implémentée dans la dernière version. Il est nécessaire de mentionner ici pourquoi l'énumération Java doit être implémentée. J'ai connu les énumérations en Java. Avant cela, j'utilisais PHP depuis longtemps et je n'avais jamais entendu parler des énumérations. Cependant, dans les projets Java, les énumérations peuvent être vues partout, surtout lorsque l'API renvoie un code d'état unifié. scène, c'est presque devenu la norme, donc je n'ai aucun moyen de l'ignorer, donc j'apprends aussi à l'utiliser. Quand j'utilise à nouveau PHP, je trouve que je n'ai pas l'habitude de ne pas avoir d'énumérations, donc j'ai envie de chercher. Énumérations PHP
Comme nous le savons tous, il existe deux options pour utiliser les énumérations en PHP L'une est la bibliothèque d'énumération officielle fournie dans SPL. Ne vous inquiétez pas, après avoir lu la documentation, vous constaterez que non seulement vous devez l'installer en tant qu'extension, mais que les méthodes qu'elle propose sont également très limitées. Nous choisissons donc généralement la deuxième méthode, qui consiste à utiliser une bibliothèque d'énumération tierce. En lisant le code source des énumérations tierces, vous constaterez également qu'elles ont plus ou moins l'ombre des énumérations Java. Mais s'ils avaient implémenté les fonctions d'énumération Java, il n'y aurait pas de bibliothèques et d'articles d'aujourd'hui.
J'ai vérifié de nombreuses énumérations et j'ai découvert qu'elles n'avaient pas toutes la fonction principale des énumérations Java, à savoir les valeurs d'attribut personnalisées (dans les énumérations Java, les énumérations ne définissent pas simplement des noms et des valeurs constantes, vous pouvez définir des attributs pour transporter des éléments dans l'énumération) En même temps, j'ai aussi trouvé qu'il n'est pas facile d'implémenter cette fonction en PHP, j'ai donc écrit une classe abstraite dans le projet pour implémenter la fonction de correction de deux attributs, car cela nécessite plusieurs Après en l'utilisant dans le projet, je l'ai mis sur github. Après de nombreuses reconstructions et renversant mes propres idées encore et encore, je me suis finalement rapproché de l'implémentation de l'énumération Java
composer require phpenum/phpenum
PHPEnum est très similaire aux énumérations Java, comme la définition d'une énumération qui représente le sexe
En Java :
public enum GenderEnum { MALE(1, "male"), FEMALE(2, "female"); private Integer id; private String name; GenderEnum(Integer id, String name) { this.id = id; this.name = name; } public Integer getId() { return id; } public String getName() { return name; } }
Utiliser PhpEnum :
class GenderEnum extends \PhpEnum\Enum { const MALE = [1, 'male']; const FEMALE = [2, 'female']; private $id; private $name; protected function construct($id, $name) { $this->id = $id; $this->name->$name; } public function getId() { return $this->id; } public function getName() { return $this->name; } }
Vous constaterez que leur utilisation est également très similaire
En Java :
GenderEnum.values(); // enum instance array GenderEnum.valueOf("FEMALE"); // enum instance GenderEnum.MALE.equals(GenderEnum.valueOf("MALE")); // true GenderEnum.MALE.name(); // MALE GenderEnum.MALE.ordinal(); // 0 GenderEnum.MALE.toString(); // MALE GenderEnum.MALE.getId(); // 1 GenderEnum.MALE.getName(); // male
Utiliser PhpEnum :
GenderEnum::values(); // enum instance array GenderEnum::valueOf('FEMALE'); // enum instance GenderEnum::MALE()->equals(GenderEnum::valueOf('MALE')); // true GenderEnum::MALE()->name(); // MALE GenderEnum::MALE()->ordinal(); // 0 (string)GenderEnum::MALE(); // MALE GenderEnum::MALE()->getId(); // 1 GenderEnum::MALE()->getName(); // male
Pas seulement dans ce De cette manière, PhpEnum fournit également des fonctions avancées dans les sous-classes
GenderEnum::MALE()->idEquals(1); // true GenderEnum::MALE()->NameEquals('male'); // true GenderEnum::containsId(1); // 1 GenderEnum::containsName('male'); // 1 GenderEnum::ofId(1); // enum instance GenderEnum::ofName('male'); // enum instance
Apprentissage recommandé : Tutoriel vidéo php
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!