この記事では、PHP で JAVA 列挙関数を実装する方法を紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。
反復N バージョンを経て、最新バージョンではついに PHP 列挙ライブラリ php-enum
が実装されましたが、これは Java 列挙の定義と使用法によく似ていますが、なぜ Java 列挙を実装する必要があるのかをここで説明する必要があります。 。 Java で列挙型について知りました。それまでは、長い間 PHP を使用していましたが、列挙型について聞いたことがありませんでした。しかし、Java プロジェクトでは、特に API が統一されたステータス コードを返す場合に、列挙型があらゆるところで見られます。というシーンがほぼ当たり前になってきているので無視するわけにもいかず、私も使い方を覚えますが、改めてPHPを使うと列挙型がないことに慣れていないことに気づき、検索したくなります。 PHP 列挙
ご存知のとおり、PHP で列挙を使用するには 2 つのオプションがあります。1 つは、SPL で提供される公式の列挙ライブラリです。これを見て特にうれしく思いますか?心配しないでください。ドキュメントを読むと、拡張機能としてインストールする必要があるだけでなく、拡張機能が提供する方法も非常に限られていることがわかります。したがって、通常は 2 番目の方法、つまりサードパーティの列挙ライブラリを使用する方法を選択します。サードパーティの列挙型のソース コードを読むと、多かれ少なかれ Java 列挙型の影があることがわかります。しかし、もし Java 列挙型の機能を実装していたら、今日のライブラリや記事は存在しなかったでしょう。
多くの列挙型をチェックしたところ、それらはすべて、カスタム属性値である Java 列挙型の核となる機能が欠けていることがわかりました (Java 列挙型では、列挙型は単に定数名と定数値を定義するだけではありません。同時に、この関数を PHP で実装するのは簡単ではないこともわかりました。そのため、2 つの属性を固定する関数を実現するためにプロジェクトに抽象クラスを作成しました。プロジェクトで使用した後、githubに上げ、何度も再構築し、自分の考えを何度も覆しながら、ようやくJava enumerationの実装に近づけました
composer require phpenum/phpenum
PHPEnum は、性別を表す列挙の定義など、Java の列挙と非常によく似ています。
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; } }
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; } }
これらの使用法も非常に似ていることがわかります
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
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
だけではありませんこのように、PhpEnum はサブクラスでも高度な機能を提供します
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
推奨学習: php ビデオ チュートリアル
以上がPHPでJAVA列挙関数を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。