ホームページ >バックエンド開発 >PHPの問題 >PHPでJAVA列挙関数を実装する方法

PHPでJAVA列挙関数を実装する方法

醉折花枝作酒筹
醉折花枝作酒筹転載
2021-06-18 17:18:401419ブラウズ

この記事では、PHP で JAVA 列挙関数を実装する方法を紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。

PHPでJAVA列挙関数を実装する方法

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 サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。