2012-01-12 6 views
2

私は空の方が少し早いと分かっていますが、filter_has_varは少し速くなります(php.netで書かれています)ので、空きが早いかfilter_has_varですか?PHP filter_has_varと空ですか?

+1

ベンチマークして結果をお知らせください。 –

+0

私はそれを行ったが、それはフィルターが良いが、常に正しい作品ではないと思われる – user1112984

+0

投稿結果 –

答えて

5

filter_has_var()は、$ _GET、$ _POST、$ _ETCではなく元の入力データをチェックするため、何らかの理由でスーパーグロバールがパージされた場合に便利です。例えば

:あなたは、変数を上書きすることができますが

$_GET["injected"] = 123; 

var_dump(filter_has_var(INPUT_GET, "injected")); // false 

// or the other way round 

filter拡張子が別のコピーにアクセスします。 INPUT_GETは、超大域$_GETの別名になりません。

それ以外の理由は統一のためです。 filter_varを広範囲に使用する場合、ルールセットは、isset()に対してfilter_has_var()を使用するほうが好きです。

しかし、愚かなパフォーマンス上の理由から、どちらか一方を使用しないでください。

2

ISSETチェック変数は、それぞれ独自の特定の用途を有しており、それに応じて使用されるべき変数

のデータ・タイプをチェックfilter_has_var値

を有する場合、変数は

空のチェックが存在する場合。

+0

残念ながら空ですが、issetのように使用できます。varが存在するかどうか確認してください。 – user1112984

+2

'$ var = NULL; * "変数が存在するかどうかをチェックする" *ちょっと誤解を招く可能性がある... NULL値と 'isset'に注意する – rdlowrey

1

filter_has_varemptyは全く異なる2つの機能です。これらの2つの機能の使用を入れ替えることは望ましくありません。

emptyは、実際に変数をPHPに空であると考えられるかどうかを確認する言語構造である:例えばnullarray()又は''が空であると考えられます。

filter_has_varは、単にPHPのスーパーグローバルのいずれかをチェック:$_GET$_POST$_SERVER$_ENV又は$_COOKIE変数が要求に渡されたことを確実にします。この関数は、varが空の場合でもtrueを返します。

+1

PHP関数'filter_has_var()'はPHPのスーパーグローバルの1つをチェックしません。スーパーグローバルがデータを取得するデータの生の入力ソースをチェックします。 –