ホームページ  >  記事  >  バックエンド開発  >  PHP issetとemptyの違いを詳しく解説

PHP issetとemptyの違いを詳しく解説

WBOY
WBOYオリジナル
2016-08-08 09:23:43991ブラウズ

PHP の isset() 関数は、通常、変数が設定されているかどうかを検出するために使用されます
形式: bool isset (mixed var [,mixed var [, ...]])
関数: 変数が設定されているかどうかを検出します
戻り値:
変数が存在しない場合はFALSEを返す
変数が存在し、その値がNULLの場合もFALSEを返す
変数が存在し、その値がNULLでない場合はTRUEを返す
複数の変数を同時にチェックする場合はTRUEそれぞれの単一項目が前の要件を満たしている場合にのみ返されます。それ以外の場合、結果は FALSE になります。
バージョン: PHP 3、PHP 4、PHP 5
その他の説明:
unset() を使用して変数を解放すると、その変数は isset されなくなります。 ()。
PHP 関数 isset() は変数にのみ使用でき、他のパラメータを渡すと解析エラーが発生します。
定数が設定されているかどうかを検出するには、define() 関数を使用します。
PHP の empty() 関数は、値が空かどうかを判断します
形式: bool empty (mixed var)
関数: 変数が空かどうかを確認します
戻り値:
変数が存在しない場合は TRUE を返します
変数が存在し、かつその値 ""、0、"0"、NULL、、FALSE、array()、var $var; および属性のないオブジェクトの場合、TRUE が返されます
変数が存在し、値が ""、0、" でない場合0"、NULL、FALSE、array()、var $var;、および属性のないオブジェクトは FALSE を返します
バージョン: PHP 3、PHP 4、PHP 5
その他の命令:
empty() return value =!(boolean ) varですが、変数が未定義であるため、警告メッセージは生成されません。詳細については、「ブール値への変換」を参照してください。
empty() は変数にのみ使用できます。他のパラメータを渡すと Paser エラーが発生し、操作が終了します。
定数が設定されているかどうかを検出するには、define() 関数を使用します。
例: empty() と isset() の単純な比較

<?<span>php 
</span><span>$var</span> = 0<span>; 
</span><span>//</span><span> 结果为 true,因为 $var 为空 </span><span>if</span> (<span>empty</span>(<span>$var</span><span>)) { 
</span><span>echo</span> '$var is either 0 or not set at all'<span>; 
} 
</span><span>//</span><span> 结果为 false,因为 $var 已设置 </span><span>if</span> (!<span>isset</span>(<span>$var</span><span>)) { 
</span><span>echo</span> '$var is not set at all'<span>; 
} 
</span>?> 

注: これは関数ではなく言語構造であるため、変数関数から呼び出すことはできません。
注: empty() は変数のみを検出します。変数ではないものを検出すると解析エラーが発生します。つまり、次のステートメントは機能しません: empty(addslashes($name))。

以下は isset 関数と empty 関数の詳細な例のテスト済みコードです。これを読んだ後は、基本的に同じです。

<?<span>php 
</span><span>error_reporting</span>(<span>E_ALL</span><span>); 
</span><span>echo</span> '<B>未定义$var</b><Br>'<span>; 
</span><span>echo</span> "isset测试:<Br>"<span>; 
</span><span>if</span> ( <span>isset</span> ( <span>$var</span><span> )) 
{ 
</span><span>echo</span> '变量$var存在!<Br>'<span> ; 
} 
</span><span>echo</span> "empty测试:<Br>"<span>; 
</span><span>if</span> ( <span>empty</span> ( <span>$var</span><span> )){ 
</span><span>echo</span> '变量$var的值为空<Br>'<span>; 
} 
</span><span>else</span><span>
{ 
</span><span>echo</span> '变量$var的值不为空<Br>'<span>; 
} 
</span><span>echo</span> "变量直接测试:<Br>"<span>; 
</span><span>if</span> ( <span>$var</span><span> ){ 
</span><span>echo</span> '变量$var存在!<Br>'<span>; 
} 
</span><span>else</span><span> { 
</span><span>echo</span> '变量$var不存在!<Br>'<span>; 
} 
</span><span>echo</span> '----------------------------------<br>'<span>; 
</span><span>echo</span> '<B>$var = \'\'</b><Br>'<span>; 
</span><span>echo</span> "isset测试:<Br>"<span>; 
</span><span>$var</span> = ''<span>; 
</span><span>if</span> ( <span>isset</span> ( <span>$var</span><span> )) 
{ 
</span><span>echo</span> '变量$var存在!<Br>'<span> ; 
} 
</span><span>echo</span> "empty测试:<Br>"<span>; 
</span><span>if</span> ( <span>empty</span> ( <span>$var</span><span> )){ 
</span><span>echo</span> '变量$var的值为空<Br>'<span>; 
} 
</span><span>else</span><span>
{ 
</span><span>echo</span> '变量$var的值不为空<Br>'<span>; 
} 
</span><span>echo</span> "变量直接测试:<Br>"<span>; 
</span><span>if</span> ( <span>$var</span><span> ){ 
</span><span>echo</span> '变量$var存在!<Br>'<span>; 
} 
</span><span>else</span><span> { 
</span><span>echo</span> '变量$var不存在!<Br>'<span>; 
} 
</span><span>echo</span> '----------------------------------<br>'<span>; 
</span><span>echo</span> '<B>$var = 0</b><Br>'<span>; 
</span><span>echo</span> 'isset测试:<Br>'<span>; 
</span><span>$var</span> = 0<span> ; 
</span><span>if</span> ( <span>isset</span> ( <span>$var</span><span> )) 
{ 
</span><span>echo</span> '变量$var存在!<Br>'<span> ; 
} 
</span><span>echo</span> "empty测试:<Br>"<span>; 
</span><span>if</span> ( <span>empty</span> ( <span>$var</span><span> )){ 
</span><span>echo</span> '变量$var的值为空<Br>'<span>; 
} 
</span><span>else</span><span>
{ 
</span><span>echo</span> '变量$var的值不为空<Br>'<span>; 
} 
</span><span>echo</span> "变量直接测试:<Br>"<span>; 
</span><span>if</span> ( <span>$var</span><span> ){ 
</span><span>echo</span> '变量$var存在!<Br>'<span>; 
} 
</span><span>else</span><span> { 
</span><span>echo</span> '变量$var不存在!<Br>'<span>; 
} 
</span><span>echo</span> '----------------------------------<br>'<span>; 
</span><span>echo</span> '<B>$var = null</b><Br>'<span>; 
</span><span>echo</span> 'isset测试:<Br>'<span>; 
</span><span>$var</span> = <span>null</span><span> ; 
</span><span>if</span> ( <span>isset</span> ( <span>$var</span><span> )) 
{ 
</span><span>echo</span> '变量$var存在!<Br>'<span> ; 
} 
</span><span>echo</span> "empty测试:<Br>"<span>; 
</span><span>if</span> ( <span>empty</span> ( <span>$var</span><span> )){ 
</span><span>echo</span> '变量$var的值为空<Br>'<span>; 
} 
</span><span>else</span><span>
{ 
</span><span>echo</span> '变量$var的值不为空<Br>'<span>; 
} 
</span><span>echo</span> "变量直接测试:<Br>"<span>; 
</span><span>if</span> ( <span>$var</span><span> ){ 
</span><span>echo</span> '变量$var存在!<Br>'<span>; 
} 
</span><span>else</span><span> { 
</span><span>echo</span> '变量$var不存在!<Br>'<span>; 
} 
</span><span>echo</span> '----------------------------------<br>'<span>; 

</span><span>echo</span> '<B>$var ="php"</b><Br>'<span>; 
</span><span>echo</span> 'isset测试:<Br>'<span>; 
</span><span>$var</span> = "php"<span>; 
</span><span>if</span> ( <span>isset</span> ( <span>$var</span><span> )) 
{ 
</span><span>echo</span> '变量$var存在!<Br>'<span> ; 
} 

</span><span>echo</span> "empty测试:<Br>"<span>; 
</span><span>if</span> ( <span>empty</span> ( <span>$var</span><span> )){ 
</span><span>echo</span> '变量$var的值为空<Br>'<span>; 
} 
</span><span>else</span><span>
{ 
</span><span>echo</span> '变量$var的值不为空<Br>'<span>; 
} 
</span><span>echo</span> "变量直接测试:<Br>"<span>; 
</span><span>if</span> ( <span>$var</span><span> ){ 
</span><span>echo</span> '变量$var存在!<Br>'<span>; 
} 
</span><span>else</span><span> { 
</span><span>echo</span> '变量$var不存在!<Br>'<span>; 
} 
</span>?>

PHP を使用してページ プログラムを作成するとき、私はよく変数処理関数を使用して、 PHP ページ末尾パラメータ 特定の変数の値が空かどうか 最初は empty() 関数の使用に慣れていましたが、いくつかの問題が見つかったので、isset() 関数に切り替えたところ、問題はなくなりました。 。
名前が示すように、empty() は変数が「空」かどうかを判断し、isset() は変数が設定されているかどうかを判断します。いわゆる「名前のとおり」ということで、最初に少し回り道をしました。変数の値が 0 の場合、empty() も真 (True) になるため、いくつかの事故が発生します。 empty() と isset() は両方とも変数処理関数であり、どちらも変数が設定されているかどうかを判断するために使用されますが、いくつかの違いがあることがわかりました。empty は変数が空かゼロかどうかも検出します。変数値が 0 の場合、empty() は変数が空であることと同等、つまり設定されていないことと同等であるとみなします。
たとえば、$id 変数を検出するには、$id=0 の場合、empty() と isset() を使用して、変数 $id が設定されているかどうかを検出します。両方とも異なる値を返します。empty() は、あると考えます。設定なし、isset() $id の値を取得できます:

<span>$id</span>=0<span>; 
</span><span>empty</span>(<span>$id</span>)?<span>print</span> "It's empty .":<span>print</span> "It's <span>$id</span> ."<span>; 
</span><span>//</span><span>结果:It's empty . </span><span>print</span> "<br>"<span>; 
</span>!<span>isset</span>(<span>$id</span>)?<span>print</span> "It's empty .":<span>print</span> "It's <span>$id</span> ."<span>; 
</span><span>//</span><span>结果:It's 0 . </span>

これは、変数処理関数を使用するとき、変数の値が 0 である可能性がある場合、empty() を使用するときは注意することを意味します。現時点では isset に置き換える方が賢明です。
PHP ページの URL 末尾パラメーターが id=0 である場合 (例: test.php?id=0)、比較してみます:

<span>if</span>(<span>empty</span>(<span>$id</span>)) <span>$id</span>=1; - 若 id=0<span> ,id 也会为1 
</span><span>if</span>(!<span>isset</span>(<span>$id</span>)) <span>$id</span>=1; - 若 id=0 ,id 不会为1 

上記の推論を検出するには、次のコードを個別に実行できます:

りー


それらの関係について話すと、empty() と isset() は両方とも変数処理関数であり、その機能は変数が設定されているかどうかを判断することであるという点が共通しています。変数を処理すると、それらの関係の理解が不十分になります。 empty() と isset() という 2 つの関数自体を考慮するだけでも、別の角度から見るとさらに混乱するでしょう。 empty() と isset() の処理対象は未定義変数、0、空文字列に過ぎません。
変数が 0 の場合、empty() は TRUE を返し、isset() は TRUE を返します。
変数が空の文字列の場合、empty() は TRUE を返し、isset() は TRUE を返します。定義されている場合、empty() は TRUE を返し、isset() は FLASE を返します。
マニュアルでの empty() の説明は次のとおりです:
説明 bool empty(mixed var)
var が空でない、または非値がゼロの場合、empty() は FALSE を返します。つまり、""、0、"0"、NULL、FALSE、array()、var $var;、およびプロパティを持たないオブジェクトは空とみなされ、var が空の場合は TRUE が返されます。
マニュアルでの isset() の説明は次のとおりです:
isset() は変数が設定されているかどうかを検出します
説明 bool isset (mixed var [,mixed var [, ...]] )
var が存在する場合は TRUE を返します、それ以外の場合は FALSE を返します。
unset() を使用して変数が解放された場合、それは isset() ではなくなります。 isset() を使用して NULL に設定された変数をテストすると、FALSE が返されます。また、NULL バイト (「?」) は PHP の NULL 定数と同等ではないことに注意してください。
警告: isset() は変数でのみ使用できます。他のパラメータを渡すと解析エラーが発生するためです。定数が設定されているかどうかを確認したい場合は、define()関数を使用できます。

変数が宣言されているかどうかを判定したい場合はisset関数を使うことができます 変数にデータが代入され空でないかどうかを判定したい場合はempty関数を使うことができます
こんなことをしたい場合変数が存在するか空でないかを判断するには、まず isset 関数を使用し、次に empty 関数を使用します

上記では、PHP isset と empty の違いを、関連する側面も含めて詳しく説明しました。PHP チュートリアルに興味のある友人に役立つことを願っています。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。