PHPでの列挙型(列挙型)


PHPでの列挙型(列挙型)



解決策1:定数のリスト


このソリューションでは、PHPのバージョン4から有効です。

列挙は、一定の値と同じ名前空間に一緒に変数名のセットとの間の同義語機構です。

古典同義語メカニズムは一定です。このメカニズムを受け入れる言語は名前、通常はグローバルな可視性、代わりのプログラムを実行している時間の間に変更されませんスカラー値を宣言して使用することができます。

PHPでは、私たちは書きます:

(定義"maConstante" 、5.5);

および減損テストのために、我々は次のように記述します。

もし($ myVariable変数=== maConstante)
faireAvec();

faireAutrement();

定数は、列挙をシミュレートするための最も簡単な方法です。しかし、また、それほど強力。

1は、ハンドルオペレーティングシステム名のリストを持っている場合たとえば、あなたが言うことができます:

(定義"Linuxの" 、0);(定義"マック" 、1);(定義"ウィンドウズ" 、2)。

あなたはその型の変数に減損テストを行いたいときに、我々は書きます:

スイッチ($ myVariable変数){Linuxボックス:faireAvecLinux();破ります;Macのボックス:faireAvecMac();破ります;Windowsのボックス:faireAvecWindows();破ります;}

何よりも読みやすいです。

スイッチ($ myVariable変数){ケース0:faireAvecLinux();破ります;ケース1:faireAvecMac();破ります;ケース2:faireAvecWindows();破ります;}

このソリューションは、ほとんどのアイドルを喜ばますが、最も要求の厳しいを満たしていません。確かに、定数の一覧で、名前は同じグループで一緒に接続されていないとも、ソースコードで個別に報告することができます。彼らは、便宜上側でわずか側面です。

あなたは一般的な意味を持っている定数値のセットを持っている場合今、それはプログラムの可読性の観点から理にかなって、同じ名前空間内のそれらのグループに便利です。

解決策2:連想配列のキー


このソリューションでは、PHPのバージョン4から有効です。

PHP内のテーブルの大きな強みは、すべての絵の後ろに連想配列を隠していることです。伝統的なテーブルは、特定のタイプの値に連続した整数を関連付け、連想配列は、別の型の値に任意のタイプの値を組み合わせます。これは、テーブルの概念の一般化の一形態です。

一般に、このような連想配列を述べています:

<?PHP$配列=配列(1、1、1、1、1、8 =>1、4 =>1、19、3 =>13)。しますprint_r($配列);?>

上の例の出力は以下となります。

配列

[0] => 1
[1] => 1
[2] => 1
[3] => 13
[4] => 1
[8] => 1
[9] => 19


リストを作成するには、我々は続行されます:

=配列$ OS("Linuxの"=>0 "マック"=>1 "ウィンドウズ"=>3)。

そして、減損テストを行うために、我々は書きます:

スイッチ($ myVariable変数){ボックス$ OS ["Linuxの"]:faireAvecLinux();破ります;ボックス$ OS ["マック"]:faireAvecMac();破ります;ボックス$ OS ["ウィンドウズ"]:faireAvecWindows();破ります;}

これは、テーブル値としてテーブルとインデックスの検索キーとして文字列を使用しているため、ここでは関連のテーブルのあまり一般的に使用されます。しかし、言語のこの形式は、二つのことを指定するために使用しました:
  • myVariable変数の可能な値は、変数が(含まれているものを表現することが明らか表現に置き換えられます"Linuxの"、 "MASOS" と "ウィンドウズ" 0、1、2)よりもはるかに明確です。これは、プログラムの可読性を向上させます。
  • myVariable変数の可能な値は明確に定義された名前(この例では、オペレーティング・システム)の領域に制限されています。これはさらに、プログラムの可読性と理解を高めます。


ショートバージョンは、魅力的なものの、動作しないことに注意してください:

=配列$ OS("Linuxの"、 "マック"、 "ウィンドウズ");

PHPプリプロセッサは自動的にインデックスを割り当てるための等価です。

$ OS =配列(0 =>"Linuxの"1 =>"マック"、2 =>"ウィンドウズ");

言語要素としてのキーの組み合わせを使用しているここで使用トリックを除きます。

解決策3:静的列挙クラス


このソリューションでは、PHPのバージョン5からのみ使用可能です。

クラスは、プログラムによって操作概念を表すプログラミングユニットです。クラスやコンセプトのために列挙しておくと便利です。これは、これまで以上に読みやすく、理解しやすいプログラムを作成することができます。
このソリューションは、本当に1ではなく、以前のソリューション、プログラミングオブジェクトの拡張ではありません。

まず、オブジェクトプログラミングの概念を含んでいるPHPのバージョン4で、我々は、コンテナクラスの配列$ OSを宣言することができますが、それはメンバーになると不コンテナクラスのすべてのインスタンスに複製されます。唯一の静的なクラスメンバの概念を取り入れ、PHPのバージョン5と、以下のトリックを使用することができます。

プログラムがインストールされているシステムとの取引を操作している場合たとえば、あなたはSystemクラスを作成することができます。

クラスシステム{パブリック静的$のOS =配列("Linuxの"=>0 "マック"=>1 "ウィンドウズ"=>3)。パブリック静的$ LinuxFamily =配列("Debianの"=>0 "スーズ"=>1 "Ubuntuの"=>3)。プライベート$名;プライベート$ファミリー;プライベート$バージョン。/ *コンストラクタ* /公共__construct($名、$ファミリー、$バージョン){ます$ this->名前= $名;ます$ this-> 家族= $ファミリー;ます$ this->バージョン= $バージョン。}/ * *アクセサ/パブリック関数のgetName(){しますreturn $ this->名前; }...}

そして、システム型の変数を宣言するために、我々は書きます:

$ MySystem =新しいSystem(システム:: $のOS ["Linuxの"]、システム:: $ LinuxFamily ["Ubuntuの"] "7.10");

何が必ずしもより読みやすいです。

$ MySystem =新しいシステム(0、3、 "7.10");

同様に、減損テストのために、我々は書きます:

スイッチ($ monSysteme->getName()){ボックス$システム:: OS ["Linuxの"]:faireAvecLinux();破ります;ボックス$システム:: OS ["マック"]:faireAvecMac();破ります;ボックス$システム:: OS ["ウィンドウズ"]:faireAvecWindows();破ります;}

結論


本論文では、PHP言語での列挙の概念が存在しないことを克服するための3つの手法を提示しました。それは非常にエレガントではありませんが、少なくとも、コードに多くの明快さを持って来ることができます。

これらの技術のいくつかの弱点:
  • 重さの書き込み:PHPが列挙(命名、ショートカット言語...)へのメカニズムを持っているように、それは、シミュレーションを使用するには、いくつかの誤った名称(アソシエーションテーブルの逆を使用)を行う必要があります。
  • (列挙することにより定義された値空間に変数の値に属する)は、任意の制御コードを不明瞭にする傾向があり、これらの列挙、言語のより少ない危険なねじれを扱う変数に行うことができません。


これらは、PHP開発者は、言語のこの概念を統合するまでちょうど一時的なソリューションです...
あなたはいないJava言語は、そのバージョン5以降(ただし、見事に列挙のコンセプトは、クラスの概念と完全に統合されているため)、この概念を取り入れ、患者でなければなりません。
PHPでの列挙型(列挙型)この記事(PDF)をダウンロード cs_AlexN投稿者。 」と題されたこの文書 PHPの»から列挙型(列挙型)コード・ソース (Codes-sources.commentcamarche.net)クリエイティブ・コモンズのライセンスの下で利用できるようになります。あなたはライセンスの定める条件の下で、このページのコピーを変更、コピーすることができ、このノートとして明確に表示されます。この記事をダウンロードする(PDF