2016-05-07 12 views
1

私はいないタイプヒンティングのためのenumarationsとその「実装」enumartionsを使用したPHPタイプのヒント?

PHP and Enumerations

点であり、なぜ使用列挙、についてはこちらを読みましたか?

ですが、この実装ではタイプヒントに使用できません。 enumエントリはすべて文字列であるためです。

私は

function($a){ 

} 

$a'foo''bar'やPHPで'baz'

でなければならないと言うことができる方法はありますか?

私はphpstorm/intellijを使用しています。そうする別の方法がある場合は、私も問題ありません。例えば。 phpstormのautocompletion magicを使って、エラーをコンパイルする可能性があります。

答えて

2

渡された文字列に特定の値が必要であることをPHPに組み込む方法はありません。 PHP7でさえありません。あなたが知っているオブジェクトと配列をタイプヒントできます。列挙はその問題を解決しますが、PHPは列挙をサポートしていません。

本当に必要な場合は、強く型付けされたプログラミング言語を考慮する必要があります。あなたは、PHP

であなたが確認することができます簡単な方法を立ち往生している場合は

はあなたの文字列は、それがこれらの値の1ではない場合吹くクラスにすることですいくつかのルールに従います。

ところで

~/Code/stack-overflow $ php enums.php 
Tuesday 
PHP Fatal error: Uncaught exception 'Exception' with message 'Not a week day.' in /Users/marianol/Code/stack-overflow/enums.php:8 
Stack trace: 
#0 /Users/marianol/Code/stack-overflow/enums.php(23): WeekDay->__construct('Saturday') 
#1 {main} 
    thrown in /Users/marianol/Code/stack-overflow/enums.php on line 8 

Fatal error: Uncaught exception 'Exception' with message 'Not a week day.' in /Users/marianol/Code/stack-overflow/enums.php:8 
Stack trace: 
#0 /Users/marianol/Code/stack-overflow/enums.php(23): WeekDay->__construct('Saturday') 
#1 {main} 
    thrown in /Users/marianol/Code/stack-overflow/enums.php on line 8 

この

<?php 

class WeekDay { 
    private $value; 

    public function __construct($value) { 
     if (!in_array($value, ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'])) 
      throw new Exception("Not a week day."); 
     else 
      $this->value = $value; 
    } 

    public function __toString() { 
     return $this->value; 
    } 
} 

function echoWeekDay(WeekDay $weekDay) { 
    echo $weekDay . "\n"; 
} 

echoWeekDay(new WeekDay("Tuesday")); 
echoWeekDay(new WeekDay("Saturday")); 

ファイル名を指定して実行してみてください、列挙型は、主型ヒンティング関数の引数には使用されません。たとえば、データベースでは列挙型フィールドを使用してストレージの効率を最適化します(列挙型の場合は列挙型よりもストレージ容量が少なくて済みます)。プログラミング言語で列挙型データ型が提供されない場合は、列挙型のデータ型に戻してデータベースに戻します。

+0

データベースの列についての良い点。私はまだ私の立場に立っています。ソフトウェア開発者として働いているときに、関数の引数としていくつの文字列が使われていますか?幾つ??それは常に非常によく定義された文字列のセットです。それは "あなたが望むものは何でも"です。そして、この文字列が利用可能であることを表現する方法はありません。それは、それぞれの単一機能のためにドキュメントを手に入れなければならないのは残念です。 – Toskan

+0

@トスカン:それは良い点です。コンパイラ(またはインタプリタ)が問題の大部分を見つけるのを助けることは、強く型付けされた言語で得られるものとまったく同じです。 – mlg

+0

はいはい。しかし、静的に型指定された言語にも欠点があります。タイプヒントがPHPで適切に機能し、列挙されるならば、十分に良いでしょう。それは多くのことを聞くように聞こえるが、実際にはそうではない。私はpython 3.x型ヒントがどのように動作するのだろうか、それは3.4以降の列挙型を持つようです。ちょっとミッキーマウスプログラミングです。 – Toskan

関連する問題