isset()およびempty()-使用するもの


105

私のコーディングスタイルを改善するのを手伝ってくれませんか?この問題を解決するために、私は通常次のことを行います。

チェック-この変数は設定されているかどうか 設定されている場合-チェックします-空かどうかを確認します。

<?php
    $var = '23';
    if (isset($var)&&!empty($var)){
        echo 'not empty';
    }else{
        echo 'is not set or empty';
    }
?>

そして、私は質問があります-empty()の前にisset()を使用する必要があります-必要ですか?TIA!


空は!isset($ var)です|| $ var == false
zloctb 2015年

2
私の意見ではempty()はPHPの恐ろしい開発です。どのような形式でも「0」は「空」と見なされるため、多くのデバッグ時間を費やす悪いトラップに陥る可能性があります。私は言うでしょう:絶対に避けて、ロジックを自分で作成してください
John

回答:


143

それはあなたが探しているものに依存します、それが空emptyであるかどうかを確認するだけの場合は、設定されているかどうかをチェックするだけで使用されますisset。何かが設定されているかどうかを知りたい場合は使用してください。

Empty 変数が設定されているかどうかをチェックし、設定されている場合はnull、 ""、0などをチェックします

Isset 設定されているかどうかを確認するだけで、null以外の値である可能性があります

ではempty、次のようなものが空であると見なされています。

  • ""(空の文字列)
  • 0(0は整数)
  • 0.0(フロートとして0)
  • "0"(文字列として0)
  • ヌル
  • array()(空の配列)
  • var $ var; (宣言された変数ですが、クラスに値がありません)

http://php.net/manual/en/function.empty.phpから


コメントで述べたように、警告がないことはempty()でも重要です

PHPマニュアルによると

empty()は(ブール)varの反対ですが、変数が設定されていない場合は警告が生成されません

issetについて

PHPマニュアルによると

isset()は、NULLに設定されている変数をテストするとFALSEを返します


あなたのコードは次のようにうまくいきます:

<?php
    $var = '23';
    if (!empty($var)){
        echo 'not empty';
    }else{
        echo 'is not set or empty';
    }
?>

例えば:

$var = "";

if(empty($var)) // true because "" is considered empty
 {...}
if(isset($var)) //true because var is set 
 {...}

if(empty($otherVar)) //true because $otherVar is null
 {...}
if(isset($otherVar)) //false because $otherVar is not set 
 {...}

それは意味です-上記のコードで変数セットが2回設定されているかどうかを確認しますか?:)
Dmitry Belaventsev '25

空であるかどうかを確認するだけです。そうでない場合、phpはエラーをスローしません。
Pez Cuckow、2011

3
あなたは最大のポイントを省いていますempty:テストされた変数が存在しないとき、それは警告をスローしません。それがこの関数の要点であり、それ以外はと同じです== false
だます

1
したがって、「変数が設定されていなくても警告が生成されない」というマニュアルの事実は私を混乱させました。警告が出なくても、以下のコードで問題が発生しないわけではありません。今では私には明らかです。ありがとう!
Dmitry Belaventsev 2011

「それが設定されている場合、それはまだnullになる可能性がちょうどチェックをISSET」真実ではない:issetヌル(既存の)上の変数は、と評価されますfalse
netcoder、2011

12

あなたの特定のケースには:if ($var)

変数が存在するかどうかissetわからない場合に使用する必要があります。あなたがが非常に最初の行でそれを宣言しているので、あなたはそれゆえ、あなたが、いや、する必要はありません、それが存在することがわかっているべきではありません使用します。isset

同じことがにも当てはまりますが、emptyそれだけemptyでも値の真偽のチェックが組み合わされています。emptyはと同等で!isset($var) || !$varあり、または!emptyと同等です。isset($var) && $varisset($var) && $var == true

あなたが唯一の変数をテストしたい場合は存在しなければならないためtruthinessをif ($var)完全に十分なポイントです。


これははるかによく説明します。このような他のすべてのケースの比較が得られれば!empty is equivalent to isset($var) && $var、すばらしいでしょう。ありがとう@deceze
Vir

6

empty()を使用することができます- ドキュメントにあるように、変数に値がない場合はfalseを返します。

同じページの例:

<?php
$var = 0;

// 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';
}
?>

NULLでないかどうかだけを知りたい場合は、issetを使用できます。それ以外の場合は、empty()を単独で使用しても問題ありません。


反対票の説明?それらが同じかどうかを尋ねているのではなく、空をチェックする前にissetをチェックする必要があるかどうかを尋ねています。
クリス

私は反対投票しませんでしたが、「nullでないことを知りたい場合はissetを使用してください」は正しくありません$var = null; isset( $var ) == true
JJJ 2011

PHP5 / 4マニュアルから:isset()-"変数が設定されていてNULLでないかどうかを判断します。" us.php.net/manual/en/function.isset.php
chris

2

ここでの出力であるisset()empty()宣言されていない、ヌル、偽と真:4つの可能性については。

$a=null;
$b=false;
$c=true;

var_dump(array(isset($z1),isset($a),isset($b),isset($c)),true); //$z1 previously undeclared
var_dump(array(empty($z2),empty($a),empty($b),empty($c)),true); //$z2 previously undeclared

//array(4) { [0]=> bool(false) [1]=> bool(false) [2]=> bool(true) [3]=> bool(true) } 
//array(4) { [0]=> bool(true) [1]=> bool(true) [2]=> bool(true) [3]=> bool(false) } 

ケースを除いて、すべての「isset」の結果は「empty」の結果の反対であることがわかり$b=falseます。falseと評価されたすべての値(値ではなく非値であるnullを除く)はisset、「空」でテストされた場合はtrueを返し、「空」でテストされた場合はfalseを返します。

したがってisset()、変数の存在が心配な場合に使用します。またempty、trueまたはfalseをテストするときに使用します。空虚事項の実際の型であれば、使用is_nullして===0===false===''


1

varが設定されていない場合、空はtrueを返します。しかし、varが空でなくてもissetはtrueを返します。


-3
$var = 'abcdef';
if(isset($var))
{
   if (strlen($var) > 0);
   {
      //do something, string length greater than zero
   }
   else
   {
     //do something else, string length 0 or less
   }
}

これは簡単な例です。それが役に立てば幸い。

編集:isset上記のように変数が定義されていない場合に追加すると、エラーが発生し、少なくとも最初に設定されたものが頭痛の種を取り除くのに役立つかどうかを確認します。


7
strlen 下のゼロ?そのひもを見たい。
だます

@deceze大まかな例:) OK use = 0 not <0
Akos
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.