渡された文字列に特定の値が必要であることを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"));
ファイル名を指定して実行してみてください、列挙型は、主型ヒンティング関数の引数には使用されません。たとえば、データベースでは列挙型フィールドを使用してストレージの効率を最適化します(列挙型の場合は列挙型よりもストレージ容量が少なくて済みます)。プログラミング言語で列挙型データ型が提供されない場合は、列挙型のデータ型に戻してデータベースに戻します。
出典
2016-05-07 03:33:51
mlg
データベースの列についての良い点。私はまだ私の立場に立っています。ソフトウェア開発者として働いているときに、関数の引数としていくつの文字列が使われていますか?幾つ??それは常に非常によく定義された文字列のセットです。それは "あなたが望むものは何でも"です。そして、この文字列が利用可能であることを表現する方法はありません。それは、それぞれの単一機能のためにドキュメントを手に入れなければならないのは残念です。 – Toskan
@トスカン:それは良い点です。コンパイラ(またはインタプリタ)が問題の大部分を見つけるのを助けることは、強く型付けされた言語で得られるものとまったく同じです。 – mlg
はいはい。しかし、静的に型指定された言語にも欠点があります。タイプヒントがPHPで適切に機能し、列挙されるならば、十分に良いでしょう。それは多くのことを聞くように聞こえるが、実際にはそうではない。私はpython 3.x型ヒントがどのように動作するのだろうか、それは3.4以降の列挙型を持つようです。ちょっとミッキーマウスプログラミングです。 – Toskan