以下の例では、0を整数と見なし、「0」を文字列と見なしたいのですが、empty()は「0」を文字列と見なします。
$var = '0';
// Evaluates to true because $var is empty
if (empty($var)) {
echo '$var is empty';
}
'0'を文字列として受け取るために'empty()を作成するにはどうすればよいですか?
empty()にそれを取らせることはできません。それが設計された方法です。and
代わりに、テストするステートメントを作成できます。
if (empty($var) && $var !== '0') {
echo $var . ' is empty';
}
もちろん、チェックisset
する他の空を無効にしたい場合を除いて、を使用できます。empty
でできませんempty
。PHPマニュアルから:
次のものは空であると見なされます。
- ""(空の文字列)
- 0(整数として0)
- 「0」(文字列として0)
- ヌル
- FALSE
- array()(空の配列)
- var $ var; (宣言された変数ですが、クラスに値がありません)
他のチェックを追加する必要があります。
empty()だけではできません。マニュアルを参照してください。ただし、これは可能です。
if ($var !== '0' && empty($var)) {
echo "$var is empty and is not string '0'";
}
基本的に、empty()は次のように動作します。
if (!$var) ...
ただし、変数が設定されていない場合、PHP通知はトリガーされません。
PHPには、変数の値をテストするために使用できるさまざまな関数があります。これに役立つ3つの関数は、isset()、empty()、およびis_null()です。これらの関数はすべてブール値を返します。これらの関数を正しく使用しないと、予期しない結果が生じる可能性があります。
isset()とempty()はしばしば反対の関数と見なされますが、これは常に正しいとは限りません。この投稿では、これらの機能の違いについて説明します。
isset()
isset —変数が設定されていてNULLでないかどうかを判別します
つまり、変数がnullでない場合にのみtrueを返します。空()
empty —変数が空かどうかを判別します
つまり、変数が空の文字列、false、array()、NULL、「0?」、0、および未設定の変数の場合はtrueを返します。無効である()
is_null —変数がNULLかどうかを検索します
つまり、変数がnullの場合にのみtrueを返します。is_null()はisset()の反対ですが、isset()は未知の変数に適用できるという違いがありますが、is_null()は宣言された変数にのみ適用できます。
写真の表は、これらの関数がさまざまな値に対して何を返すかを簡単に参照できるものです。空白スペースは、関数がbool(false)を返すことを意味します。
また、すべてのものをチェックするためのカスタム関数を作成しました。
function checkEmpty($var, $term = ""){
if(isset($var) && trim($var) != "" && (!empty($var) || trim($var) == 0)){
return true;
}
else{
if($term != ""){
return array("status" => "error", "desc" => "$term can not be empty");
}
else{
return array("status" => "error", "desc" => "value can not be empty");
}
}
}
できません。マニュアルより
varの値が空でもゼロでもない場合、FALSEを返します。
次のものは空であると見なされます。
- ""(空の文字列)
- 0(整数として0)
- 「0」(文字列として0)
- ヌル
- FALSE
- array()(空の配列)
- var $ var; (宣言された変数ですが、クラスに値がありません)
どちらの場合も、empty()
が返されtrue
ます。ドキュメントを確認してください。
仕様に合わせて別の関数を使用することをお勧めします。
私は常にこれをコードベースに追加します:
function is_blank($value) {
return empty($value) && !is_numeric($value);
}
そして、empty()の代わりにそれを使用してください。これは、ゼロ(int、float、またはstring)を空でないままにする問題を解決します。
2011年5月に追加されたis_blank()を参照してください。
$var = '0';
// Evaluates to true because $var is empty
if (empty($var) && $var !== '0') {
echo '$var is empty or the string "0"';
}
empty
これは、PHPレパートリーの中で最も混乱して役に立たない関数です。使用しないでください。
値をチェックするときに知りたいことが3つあります。
strpos
または正規表現を使用します)。(最後の2つは、タイプキャストまたは'==='で1つに組み合わせることができます)。
例:
if(isset($var) && is_string($var) && strlen($var) > 0)...
if(isset($var) && intval($var) > 0)...
if(isset($var) && $var === '0')...
これはより冗長に見えますが、あなたが何をしているかを明確に示しています。構造オブジェクトの場合、ショートカットゲッターを使用するのが理にかなっていることがよくあります。
/// Get a string
function s($ary, $key, $default = '') {
if(!isset($ary[$key])) return $default;
$s = trim($ary[$key]);
return strlen($s) ? $s : $default;
}
/// Get a natural number
function n($ary, $key, $default = 0) {
$n = intval(s($ary, $key));
return $n > 0 ? $n : $default;
}
$name = s($_POST, 'name');
$age = n($_POST, 'age');
空の$filterをスキップし、$ filter = '0'およびその他の値をスキップしない場合:
$filter = ''; // Or $filter = '0'; or $filter = '1';
// Trim the $filter
if(isset($filter) and ($filter != '' or $filter == '0')) {
// $filter data
};
この場合、empty()を使用しないでください。代わりにisset()を使用してください。これにより、0を整数として使用することもできます。
$var = '0';
if (!isset($var)) {
print '$var is not set';
}
$var = 0;
if (!isset($var)) {
print '$var is not set';
}
どちらも何も印刷しないでください。
PHPでは整数、文字列、浮動小数点数、およびnullは重要ではないため、できません。
かっこいいから:)
変数の特徴的な機能を確認する必要があります:is_numeric()、isset()、===、strlen()など。
例えば:
if (strlen(@$var)==0) {
echo @$var . ' is empty';
}
また
if (@$var==="" || !isset($var)) {
echo @$var . ' is empty';
}
または他の例:)