PHPメソッドの引数をどのように検証/管理し、なぜこのようにしますか?PHPメソッドの引数をどのように適用しますか?
答えて
さて、あなたは型チェックメソッドの引数の話をしている、それが依存していると仮定:
それはオブジェクトを期待していた場合、私はインターフェイスをtype-hintingを使用します。
public function foo(iBar $bar)
配列だけが必要な場合は、
array
キーワードでタイプヒントを使用します。public function foo(array $bar)
それは、文字列、int型、ブール値またはfloatを期待していた場合、私はそれをキャスト:
public function foo($bar) { $bar = (int) $bar; }
それが混在期待していた場合、私はちょうどカスケードにチェック:
public function foo($bar) { if (is_string($bar)) { //handle string case } elseif (is_array($bar)) { //... } else { throw new InvalidArgumentException("invalid type"); } }
最後に、iterable型が必要な場合は、型ヒントを使用しません。それは、ファイル名またはディレクトリを期待していた場合だけ
is_file
でそれを確認し、public function foo($bar) { if (is_array($bar)) { $bar = new ArrayIterator($bar); } if (!$bar instanceof Traversable) { throw new InvalidArgumentException("Not an Iterator"); } }
:それは最初の配列の場合、私は、その後、再ロードするイテレータをチェック
public function foo($bar) { if (!is_file($bar)) { throw new InvalidArgumentException("File doesn't exist"); } }
私はと思いますほとんどのケースを処理します。あなたが他のものを考えるなら、私は喜んでそれらに答えようとします...
ありがとう私はこのような例を探していた。 –
Typecheckingは生産段階ではなく開発段階で行うべきことです。だから、そのための適切な構文の特徴は次のようになります。
function xyz($a, $b) {
assert(is_array($a));
assert(is_scalar($b));
私はそれを回避しようと、あるいはできれ型変換を使用しますが。動的に型指定されるPHPは、異なる値に非常によく適合します。基本的な言語の振る舞いをターンダウンしたい場所はほんのわずかです。
有効ですが、大きくはありません。 [assert'のドキュメント](http://us3.php.net/assert)を見て、この抜粋を読んでください: 'アサーションは、入力パラメータチェックのような通常のランタイム操作には使用しないでください。大まかに言えば、アサーションチェックが有効化されていないと、コードは常に正しく動作するはずです。しかし、デバッグだけの場合は、うまくいきます。 – ircmaxell
@ircmaxell:これは、「Typecheckingはあなたがすべきことです生産段階ではなく開発段階で行う。実行時にタイプをチェックする必要がある場合は、より深刻な構造上の問題を推測します。型チェックが治癒する可能性は低い。このことは、開発中に検出する必要があります(これは厳密に型指定された言語のコンパイル段階によく似ています)。だから、実際にはデバッグやユニットテストの長い腕に数えられるはずです。 – mario
- 1. Sidekiqは引数をperformメソッドにどのように渡しますか?
- 2. PHPでオプションの引数をどのように作成しますか?
- 3. JavaScriptはどのように引数を評価しますか?
- 4. 関数の呼び出し時にconstポインタの引数はどのように最適化されますか?
- 5. どのようにメソッドの引数は、特定の特性
- 6. Windowsコマンドライン引数にはどのようにアクセスしますか?
- 7. "メソッドは引数には適用されません"
- 8. putメソッドは引数には適用されません
- 9. カスタムソートをどのように配列に適用しますか?
- 10. TLinkLabelのVCLStyleにどのように適用しますか
- 11. 複数の引数にfor_eachなどのSTLアルゴリズムを適用
- 12. ActiveRecord.findのa:conditions引数にどのように%を使用できますか?
- 13. C#配列を引数として渡すメソッドをどのように作成しますか?
- 14. どのようにPHPを使用して数字をエコーバックしますか?
- 15. どのようにjQueryの変化()メソッドに引数を取る関数を使用するには?
- 16. System.Data.DataTableExtensionsのCopyToDataTableメソッドはどのように使用しますか?
- 17. Ioのブロックに動的引数リストを適用するにはどうすればよいですか?
- 18. PHPのgetopt()を使用した後、どのような引数が残っているかをどのように知ることができますか?
- 19. ChainReducer.setReducerメソッドは "ChainReducerは引数に適用されません"というエラーをスローします
- 20. Pythonのコマンドライン引数はメソッドにどのように関係していますか?
- 21. NavigationWindow.Navigateメソッドはどのように使用しますか?
- 22. 引数をメソッドに渡します。 Java
- 23. 複数の引数で適用する
- 24. 最初の引数をgetoptsの引数とどのように区別しますか?
- 25. ChromeOptions型のaddExtensions(File [])メソッドは、引数(File)には適用されません。
- 26. JspWriter型のprint(boolean)メソッドは、引数には適用されません
- 27. GoogleCloudMessagingタイプのgetInstance(Context)メソッドは引数(XWalkResponceClient)には適用されません
- 28. メソッドの引数を使用してイベントをルーティングします。
- 29. Html.TextBoxForメソッドでJavaScriptの単一引用符をどのように追加しますか?
- 30. Pythonスレッドの実行はどのように引数を実行しますか?
「実施する」とはどういう意味ですか?タイプヒントについて話していますか(http://php.net/manual/en/language.oop5.typehinting.php)? – svens
あなたは_validate_を意味すると思います。 – SLaks
どういう意味ですか? –