2016-07-14 8 views
4

ユーザー入力の検証時にこの2つの機能のいずれかを使用しての違いは何ですか?厳密には関数呼び出しに関して、例えば$ _POST配列を変更する必要はありません。違いは

$ result = filter_var($ _ POST ['user_input']、FILTER_VALIDATE_INT);

$結果= filter_input(INPUT_POST、 'USER_INPUT'、FILTER_VALIDATE_INT)対

上記の2つの呼び出しの間に違いはありませんが、パフォーマンス上の問題ではなく、むしろ優先事項ですか?

PS:私はSO - Differences between filter_var and filter_inputに同様の質問があることを知っていますが、実際の違いとは異なり、2つの方法をどのように呼び出すべきかを述べています。

+0

リファレンスポスト – RDardelet

答えて

0

リクエストボディにパラメータuser_inputがまったく含まれていない場合、$_POST['user_input']は通知をトリガーします。filter_input(INPUT_POST, 'user_input', ..)は通知されません。私はphp.netに読んだから

+0

はい、そう '$ _POST'は、')(ISSET 'に対する先験的をチェックし、あればしなければならない)、その上のドキュメントをチェックしに行くと応答を行い$結果= nullの'インスタンスに対して割り当てる行方不明; '、'ながらfilter_input'を希望この場合、直接「null」に戻ります。 そうでなければ、パラメータが設定されていても違いはありませんか? –

+0

はい、パラメータが存在する場合、違いはありません。違いは、 'filter_input'が入力の欠落を透過的に処理する点です。代わりの – deceze

3

filter_varは、単にあなたがそれを使用するたびに、それはその時点で値をチェックします、あなたのコード内の任意の変数のために動作します。

filter_input値は、あなたが$_POST['something']を変更した場合、filter_input(INPUT-POST, "something", FILTER)はあなたがそれを変更する前に、それが持っていた値にチェックを実行することを意味し、元の値ご入力のをチェックします。 また、値が設定されていない場合、実行にE_NOTICEをトリガしていないようです。私は `filter_input`は単にパラメータとして入力を取るように設計されており、それがより一般的な(I'LLですので` filter_var`変数を取るだろう、など違いがあるとは思わないphp.net

+0

、あなたがいない、 'filter_input'を意味する「あなたはそれを変更する前にfilter_var(...)は、それが持っていた値のチェックを実行しますか」? @decezeによって事前に述べたように、私は '$ _POST'配列を変更する必要がないことに言及した理由ですので、基本的にはその後、違いが残っている:通知がトリガされます。 –

+0

ええ申し訳ありませんが、私は今、編集しています:D をそれでも、元の入力へのアクセスを持つことは、あなたのコードは... GET /変数$ _POSTを変更することができCMSやフレームワークの後に実行されます場合に威力を発揮することができます。 – RDardelet