153

重複の可能性:
is_null($var) と ($var === null) の違いは何ですか?

isset()PHP には、値が null かどうかを判断するための 2 つのメソッド (私が知っているものと、数えれば 3 つ) がis_null()あります=== null。そのほうが速いと聞いたことがありますが、確認はしていませんが、コード レビューで、null 評価の目的で特別に設計されているため、代わり=== nullに使用することを誰かが強く提案しました。is_null()彼はまた、数学か何かについて話し始めました。

とにかく、明らかに遅いという事実は、それが実際is_null()よりも多くのことを行っており、=== nullおそらく好まれていると私に信じさせます. どちらか一方を使用する理由はありますか?常に 1 つが優先されますか? どうisset()ですか?

この質問を閉じない可能性があるための補遺として、isset()vs . はis_null()どうですか? 通知を抑制するだけでよいように思われるisset()ので、実際に未定義の変数の通知が必要is_null()でない限り、代わりに使用する理由はありますか? その時点で変数が初期化されていることがわかっている場合はどうですか?

is_null()最後に、よりも優先する数学的な理由はあります=== nullか? null が比較できないことについて何か?

4

7 に答える 7

216

と の間に機能上の違いはまったくありませんis_null=== null

唯一の違いは、それis_nullが関数であるため、

  1. わずかに遅い(関数呼び出しのオーバーヘッド)
  2. コールバックとして使用できますarray_map('is_null', $array)

個人的には、 andチェックとnull ===の一貫性が高いため、できる限り使用しています。false ===true ===

必要に応じて、コードを確認できます: is_identical_function( ===) とphp_is_type( ) はケースis_nullに対して同じことを行います。IS_NULL


関連するisset()言語構造は、nullチェックを行う前に変数が実際に存在するかどうかをチェックします。したがってisset($undefinedVar)、通知はスローされません。

また、isset()値が_ _ _ _ /で)。truenulloffsetExists__issettruenullarray_key_existsoffsetExists__isset

于 2011-11-22T15:07:45.210 に答える
17

他の人が述べたように、 と の使用には時差が===ありis_null()ます。簡単なテストを行ったところ、次の結果が得られました。

<?php

//checking with ===
$a = array();
$time = microtime(true);
for($i=0;$i<10000;$i++) {
    if($a[$i] === null) {
         //do nothing
    }
}
echo 'Testing with === ', microtime(true) - $time, "\n";

//checking with is_null()
$time = microtime(true);
for($i=0;$i<10000;$i++) {
    if(is_null($a[$i])) {
         //do nothing
    }
}
echo 'Testing with is_null() ', microtime(true) - $time;
?>

結果を与える

=== 0.0090668201446533 でのテスト

is_null() 0.013684034347534 によるテスト

実際のコードを見る

于 2011-11-22T15:11:12.867 に答える
6

is_nullまたはを使用する方が良いかどうかは言えません=== nullissetただし、配列で使用する場合は注意してください。

$a = array('foo' => null);

var_dump(isset($a['foo'])); // false
var_dump(is_null($a['foo'])); // true
var_dump(array_key_exists('foo', $a)); // true
于 2011-11-22T15:08:38.910 に答える
6

isset() のみが未定義変数の警告を回避しますが、それらにはすべてそれぞれの場所があります。

$ php -a
Interactive shell

php > var_dump(is_null($a));
PHP Notice:  Undefined variable: a in php shell code on line 1
bool(true)
php > var_dump($a === null);
PHP Notice:  Undefined variable: a in php shell code on line 1
bool(true)
php > var_dump(isset($a));
bool(false)
php >
于 2011-11-22T15:00:05.577 に答える
5

===is_null同じです。

このコメント によると、is_nullわずか 250ns 遅いだけです。関数は演算子よりも遅いためだと思います。

于 2011-11-22T15:08:03.500 に答える
5

isset()変数が定義されていない可能性がある場合に必要です。変数が定義されていない場合、または=== null(はい、それ醜いです) 場合は false を返します。変数または配列要素が存在しない場合にのみisset()empty()E_NOTICE を発生させません。

と の間には実際には違いはありませis_null=== null===の方がはるかに優れていると思いますが、たとえばcall_user_func、疑わしい理由で使用する必要がある場合は、 を使用する必要がありますis_null

于 2011-11-22T15:00:33.813 に答える
2

PHP ドキュメントには、に関する適切な議論と実験がありis_null, === null, issetます。特にコメント欄を読んでください。

于 2011-11-22T15:02:30.733 に答える