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. メソッド `self`引数にはどのような型を使用しますか?
- 2. Sidekiqは引数をperformメソッドにどのように渡しますか?
- 3. PHPでオプションの引数をどのように作成しますか?
- 4. どのようにVueの$ createElementメソッドに引数を渡す
- 5. どのようにJavaScriptに別の関数の引数である関数に渡される任意の数の引数を適用しますか?
- 6. Apache Flink - エラー:メソッドの適用が引数(WindowFunction)に適用されません
- 7. メソッドはジェネリックの引数には適用されません
- 8. このメソッドは引数には適用されません
- 9. どのように使用するステートメントは、PHPの関数の引数として使用されます
- 10. 引数に関数を適用するメソッドを持つクラス?
- 11. JavaScriptはどのように引数を評価しますか?
- 12. ""(二重引用符)にはメソッドがどのようにありますか?
- 13. カスタムソートをどのように配列に適用しますか?
- 14. ウェブページにどのように幅を適用しますか?
- 15. 関数の呼び出し時にconstポインタの引数はどのように最適化されますか?
- 16. どのようにメソッドの引数は、特定の特性
- 17. Windowsコマンドライン引数にはどのようにアクセスしますか?
- 18. TLinkLabelのVCLStyleにどのように適用しますか
- 19. 複数の引数を持つ関数をPHPの配列のすべての要素に適用するにはどうすればよいですか?
- 20. キーワード引数はどのように機能しますか?
- 21. メソッドadd(Component)は引数には適用されません
- 22. putメソッドは引数には適用されません
- 23. メソッドjoptionpane.Showinputdialog引数は処理には適用されません
- 24. "メソッドは引数には適用されません"
- 25. 型のメソッドは引数(クラス<Main>)には適用されませんか?
- 26. どのようにPHPを使用して数字をエコーバックしますか?
- 27. ActiveRecord.findのa:conditions引数にどのように%を使用できますか?
- 28. Pythonのスーパーコンストラクタ - どの引数を子メソッドに入れますか?
- 29. System.Data.DataTableExtensionsのCopyToDataTableメソッドはどのように使用しますか?
- 30. 複数の引数にfor_eachなどのSTLアルゴリズムを適用
「実施する」とはどういう意味ですか?タイプヒントについて話していますか(http://php.net/manual/en/language.oop5.typehinting.php)? – svens
あなたは_validate_を意味すると思います。 – SLaks
どういう意味ですか? –