PHPには、値がnullであるかどうかを判断するための2つのメソッド(私が知っていること、およびisset()
をカウントする場合は3つ)があります:is_null()
および_=== null
_。 _=== null
_の方が速いと聞いたが、確認しなかったが、コード評価では、null評価目的のために特別に設計されているので、代わりにis_null()
を使用することを強く提案した。彼はまた数学か何かについて話し始めました。
とにかく、is_null()
が明らかに遅いという事実は、_=== null
_が行うよりも多くのことを実行しており、おそらく優先されると信じるようになります。どちらかを使用する理由はありますか?常に好まれていますか? isset()
はどうですか?
この質問を閉じないための補足として、isset()
対is_null()
についてはどうでしょうか? isset()
が行うことはすべて通知を抑制することなので、未定義の変数に関する通知を実際にwantしない限り、is_null()
代わりに?変数がその時点で初期化されていることがわかっている場合はどうでしょうか?
最後に、_=== null
_よりもis_null()
を好む数学的な理由はありますか?ヌルが比較できないことについての何か?
is_null
と=== null
の機能にの違いはまったくありません。
唯一の違いは、is_null
は関数であり、したがって
array_map('is_null', $array)
。個人的には、null ===
およびfalse ===
チェックとより一貫性があるため、できる限りtrue ===
を使用します。
必要に応じて、コードを確認できます。 is_identical_function
(===
)および php_is_type
(is_null
)は、IS_NULL
ケースでも同じことを行います。
関連するisset()
言語構造は、null
チェックを実行する前に、変数が実際に存在するかどうかをチェックします。したがって、isset($undefinedVar)
は通知をスローしません。
また、値がtrue
であっても、isset()
がnull
を返す場合があることに注意してください。これは、オーバーロードされたオブジェクトで使用される場合、つまりオブジェクトがoffsetExists
/__isset
メソッドは、オフセットがtrue
であってもnull
を返します(これは、offsetExists
/array_key_exists
で__isset
を使用するため、実際には非常に一般的です)。
他の人が述べたように、_===
_と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を使用したテスト
これらにはすべて場所がありますが、未定義の変数の警告を回避するのは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 >
変数が定義されていない可能性がある場合は、isset()
が必要です。変数が定義されていない場合、または_=== null
_(はい、thatい)の場合はfalseを返します。変数または配列要素が存在しない場合、isset()
およびempty()
のみがE_NOTICEを発生させません。
_is_null
_と_=== null
_には実際には違いはありません。 _===
_ははるかに優れていると思いますが、疑わしい理由で_call_user_func
_を使用する必要がある場合は、_is_null
_を使用する必要があります。
is_null
または=== null
を使用する方が良いかどうかは言えません。ただし、配列でisset
を使用する場合は注意してください。
$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
===
およびis_null
同じです。
このコメントis_null
は250nsだけ遅いです。関数は演算子よりも遅いためだと思います。
PHPドキュメント には、is_null, === null, isset
。特にコメントのセクションを読んでください。