とに違いはisset
あり!empty
ますか?この二重ブールチェックを行うと、この方法で修正されますか、それとも冗長ですか?同じことをする短い方法はありますか?
isset($vars[1]) AND !empty($vars[1])
とに違いはisset
あり!empty
ますか?この二重ブールチェックを行うと、この方法で修正されますか、それとも冗長ですか?同じことをする短い方法はありますか?
isset($vars[1]) AND !empty($vars[1])
回答:
これは完全に冗長です。empty
は多かれ少なかれの省略形であり!isset($foo) || !$foo
、に!empty
類似していisset($foo) && $foo
ます。つまりはempty
逆の事ませisset
プラスのための追加のチェックtruthiness値のを。
または言い換えれば、empty
と同じ!$foo
ですが、変数が存在しない場合でも警告をスローしません。これがこの関数の主要なポイントです。変数の設定を気にせずにブール比較を実行します。
マニュアルはそれをこのように置きます:
empty()
反対で(boolean) var
、変数が設定されていない場合に警告が生成されないことを除いて。
!empty($vars[1])
ここで簡単に使用できます。
$vars[1]
彼は通知を受け取ります。
empty
は、PHPで最も誤解されている関数の1つです。「警告が生成されない」という小さなスニペットは見落とされがちです。自分で数回ドキュメントをスキャンして見つけ、ここに投稿する必要がありました。
empty($vars[1])
$vars[1]
設定されていなくても警告は発生しませんが、発生しますecho $vars[1]
。で事実を確認したecho $vars[1]; if (!empty($vars[1])) echo 1; else echo 0;
。
0
ますfalse
。PHPだけではありません。それでもあなたの不満が何であるかわかりません。
isset()
変数が設定されていてnullでないかどうかをテストします。
http://us.php.net/manual/en/function.isset.php
empty()
変数が特定の値に設定されている場合、trueを返すことができます。
http://us.php.net/manual/en/function.empty.php
これを実証するには、$ the_varを割り当てずに、0に設定し、1に設定して、次のコードを試してください。
<?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()と同等ではありません。
このルートをたどると、かなり不快でデバッグが難しいバグが作成されます。たとえば、このコードを実行してみてください:
<?php
$s = '';
print "isset: '" . isset($s) . "'. ";
print "!empty: '" . !empty($s) . "'";
?>
isset
がと同等であることを決して示唆していません!empty
。
$a = 0;
if (isset($a)) { //$a is set because it has some value ,eg:0
echo '$a has value';
}
if (!empty($a)) { //$a is empty because it has value 0
echo '$a is not empty';
} else {
echo '$a is empty';
}
空のちょうどチェックは、参照された変数/配列が値を持っていることをphp doc(empty)をチェックすると、これは空であると見なされる
* "" (an empty string) * 0 (0 as an integer) * "0" (0 as a string) * NULL * FALSE * array() (an empty array) * var $var; (a variable declared, but without a value in a class)
issetの間に変数が設定されていて、php doc(isset)にもあるnullでないかどうかを確認します
isset($vars[1]) AND !empty($vars[1])
と同等!empty($vars[1])
です。
経験的に示すために簡単なコードを用意しました。
最後の行は未定義の変数です。
+-----------+---------+---------+----------+---------------------+
| Var value | empty() | isset() | !empty() | isset() && !empty() |
+-----------+---------+---------+----------+---------------------+
| '' | true | true | false | false |
| ' ' | false | true | true | true |
| false | true | true | false | false |
| true | false | true | true | true |
| array () | true | true | false | false |
| NULL | true | false | false | false |
| '0' | true | true | false | false |
| 0 | true | true | false | false |
| 0.0 | true | true | false | false |
| undefined | true | false | false | false |
+-----------+---------+---------+----------+---------------------+
そしてコード
$var1 = "";
$var2 = " ";
$var3 = FALSE;
$var4 = TRUE;
$var5 = array();
$var6 = null;
$var7 = "0";
$var8 = 0;
$var9 = 0.0;
function compare($var)
{
print(var_export($var, true) . "|" .
var_export(empty($var), true) . "|" .
var_export(isset($var), true) . "|" .
var_export(!empty($var), true) . "|" .
var_export(isset($var) && !empty($var), true) . "\n");
}
for ($i = 1; $i <= 9; $i++) {
$var = 'var' . $i;
compare($$var);
}
@print(var_export($var10, true) . "|" .
var_export(empty($var10), true) . "|" .
var_export(isset($var10), true) . "|" .
var_export(!empty($var10), true) . "|" .
var_export(isset($var10) && !empty($var10), true) . "\n");
関数自体がスコープ自体に一時変数を作成するため、未定義変数は関数の外で評価する必要があります。
「空」:変数に対してのみ機能します。空は、変数の種類によって意味が異なります(マニュアルを確認してください:http : //php.net/manual/en/function.empty.php)。
"isset":変数が存在するかどうかをチェックし、真のNULLまたは偽の値をチェックします。「unset」を呼び出すことにより、設定を解除できます。もう一度、マニュアルを確認してください。
どちらを使用するかは、使用している変数のタイプによって異なります。
最初に変数が存在するかどうか、そして変数が本当にNULLまたは空ではないかどうかを最初にチェックしているので、両方をチェックする方が安全です。
同じページを使用して、次のような送信ボタンから追加/編集する場合
<input type="hidden" value="<?echo $_GET['edit_id'];?>" name="edit_id">
その後、私たちは使用すべきではありません
isset($_POST['edit_id'])
bcoz edit_id
は、ページを追加する場合でも編集する場合でも常に設定されます。代わりに、以下の条件をチェックする必要があります。
!empty($_POST['edit_id'])
empty()
関数を参照してください。空ではなくゼロ以外の値があるFALSE
かどうかvar
を返します。
それは知っておくと良いことです。つまり、この関数を使用するとNULL
、から0
までのすべてが返されます。TRUE
empty()
isset()
関数が返すものの説明は次のとおりです。存在するTRUE
場合var
は戻ります。FALSE
さもないと。
つまり、存在しない変数(または厳密にNULL
値を持つ変数)のみが関数で返さFALSE
れisset()
ます。であるかどうかにかかわらず、あらゆるタイプの値を持つすべての変数は0
、空のテキスト文字列などを返しTRUE
ます。