isset()
関数は空の文字列をTRUE
として扱うので、isset()
はHTMLフォームからのテキスト入力とテキストボックスを検証する効果的な方法ではないことをどこかで読みました。
したがって、empty()
を使用して、ユーザーが何かを入力したことを確認できます。
isset()
関数が空の文字列をTRUE
として扱うのは本当ですか?
次に、どのような状況でisset()
を使用する必要がありますか?何かがあるかどうかを確認するには、常に!empty()
を使用する必要がありますか?
たとえば
if(isset($_GET['gender']))...
これを使用して
if(!empty($_GET['gender']))...
FTA:
"isset()は、変数に(False、0または空の文字列)を含むがNULLを含まない値があるかどうかをチェックします。varが存在する場合はTRUE、そうでない場合はFALSEを返します。
一方、empty()関数は、変数に空の文字列、0、NULL、またはFalseの値があるかどうかをチェックします。 varの値が空でもゼロでもない場合、FALSEを返します。
最も一般的な方法で:
isset
変数(または配列の要素、またはオブジェクトのプロパティ)が存在するかどうかをテストしますexists(およびnullではない)empty
は、変数(...)に空でないデータが含まれているかどうかをテストします。
質問1に答えるには:
$str = '';
var_dump(isset($str));
与える
boolean true
変数$str
が存在します。
そして質問2:
Issetを使用して、変数が存在するかどうかを判断する必要があります。たとえば、データを配列として取得する場合、その配列にキーが設定されているかどうかを確認する必要がある場合があります。
について考える $_GET
/$_POST
、 例えば。
さて、その値に取り組むために、あなたがそのような値があることを知っているとき、それはempty
の仕事です。
どちらも有効な入力を確認するのに適した方法ではありません。
isset()
では十分ではありません。すでに述べたように、空の文字列が有効な値であると見なされるためです。! empty()
は、有効な値である可能性のある「0」を拒否するため、十分ではありません。isset()
を空の文字列との等価性チェックと組み合わせて使用することは、入力パラメーターが値を持っていることを偽陰性を作成せずに確認するために最低限必要なことです。
if( isset($_GET['gender']) and ($_GET['gender'] != '') )
{
...
}
しかし、「最低限」とは、まさにそれを意味します。上記のコードはすべて、$_GET['gender']
に何らかの値があるかどうかを判断します。 notは、$_GET['gender']
の値がvalid(たとえば、("Male", "Female",
"FileNotFound"
)
)。
それについては、 Josh Davis's answer をご覧ください。
isset
は、値だけでなく変数のみに使用することを意図しているため、isset("foobar")
はエラーを発生させます。 PHP 5.5、 empty
現在、変数と式の両方をサポートしています。
したがって、最初の質問は、空の文字列を保持する変数に対してisset
がtrueを返すかどうかです。そして答えは:
$var = "";
var_dump(isset($var));
PHPのマニュアルの 型比較表 は、このような質問には非常に便利です。
isset
は基本的に、変数がnull以外の値を持っているかどうかをチェックします。存在しない変数は常に値null。 empty
はisset
のカウンターパートの一種ですが、整数値0
および文字列値"0"
空として。 (再び、 型比較表 を見てください。)
$ _POST ['param']があり、それが文字列型であると仮定する場合
isset($_POST['param']) && $_POST['param'] != '' && $_POST['param'] != '0'
と同じです
!empty($_POST['param'])
isset()は、HTMLフォームからのテキスト入力とテキストボックスを検証する効果的な方法ではありません
"isset()は入力を検証する方法ではありません。"入力を検証するには、PHPの フィルター拡張 =。 filter_has_var()
は変数が存在するかどうかを示しますが、filter_input()
は実際に入力をフィルタリングおよび/またはサニタイズします。
filter_has_var()
の前にfilter_input()
を使用する必要はありません。設定されていない変数を要求すると、filter_input()
はnull
。
使用するタイミングと方法:
True 0、1、空の文字列、値を含む文字列、true、false
False nullの場合
例えば
$status = 0
if (isset($status)) // True
$status = null
if (isset($status)) // False
False 1、値を含む文字列、true
True null、空の文字列、0、falseの場合
$status = 0
if(empty($status)) // true
$status = 1
if(empty($status)) // False
issetは、何かのインスタンスが存在するかどうか、つまり変数がインスタンス化されているかどうかを判断するために使用されます...パラメータの値とは関係ありません...
パスカルMARTIN ... +1 ...
empty()は、変数が存在しない場合は警告を生成しません...したがって、変更する場合に変数の存在をテストする場合はisset()を推奨します...
empty
を使用するだけで十分です。
_if(!empty($variable)){
// Do stuff
}
_
また、整数値が必要な場合は、intval($variable) !== FALSE
も確認する価値があります。
isset($variable) === (@$variable !== null)
empty($variable) === (@$variable == false)
以下を使用して通知を回避します。これは、GETまたはPOSTで宣言された変数かどうかをチェックし、@接頭辞を使用すると、空ではないかどうかを安全にチェックでき、変数がそうでない場合は通知を回避しますセットする:
if( isset($_GET['var']) && @$_GET['var']!='' ){
//Is not empty, do something
}
$var = '';
// Evaluates to true because $var is empty
if ( empty($var) ) {
echo '$var is either 0, empty, or not set at all';
}
// Evaluates as true because $var is set
if ( isset($var) ) {
echo '$var is set even though it is empty';
}
ソース:Php.net
isset()は、変数が設定されていてnullではないかどうかをテストします。
http://us.php.net/manual/en/function.isset.php
empty()は、変数が特定の値に設定されているときにtrueを返すことができます。
http://us.php.net/manual/en/function.empty.php
<?php
$the_var = 0;
if (isset($the_var)) {
echo "set";
} else {
echo "not set";
}
echo "\n";
if (empty($the_var)) {
echo "empty";
} else {
echo "not empty";
}
?>
isset()は、変数に値が設定されているかどうかを確認するために使用され、Empty()は、指定された変数が空かどうかを確認するために使用されます。
isset()は、変数がnullでない場合にtrueを返しますが、Empty()は、変数が空の文字列の場合にtrueを返します。