2

の使用について質問ですis_null()

is_null($x) と null === $xについて議論する他の質問を読みましたが、is_null()関数が存在する理由にもっと関心がありますか?

私の考えを説明するためのいくつかのテスト:

<?php

header('Content-type: text/plain');
error_reporting(-1);

$test = 'Hello, World!';
$test2 = null;
$test3 = '';

var_dump(is_null($test));
var_dump(null === $test);
var_dump(isset($test));

var_dump(is_null($test2));
var_dump(null === $test2);
var_dump(isset($test2));

var_dump(is_null($test3));
var_dump(null === $test3);
var_dump(isset($test3));

var_dump(is_null($test4));
var_dump(null === $test4);
var_dump(isset($test4));

次の出力が生成されます。

bool(false)
bool(false)
bool(true)
bool(true)
bool(true)
bool(false)
bool(false)
bool(false)
bool(true)

Notice: Undefined variable: test4 in C:\home\ombrelle.co.uk\templates_core\test.php on line 22
bool(true)

Notice: Undefined variable: test4 in C:\home\ombrelle.co.uk\templates_core\test.php on line 23
bool(true)
bool(false)

ご覧のとおり、is_null()関数または比較メソッドを使用すると通知がスローされるため、isset()代わりに使用する必要があります。したがって、これらのメソッドを使用して通知を表示しない唯一の方法は、そうでない場合nullです。

次の点も考慮してください。

<?php

header('Content-type: text/plain');
error_reporting(-1);

var_dump((is_null($test1)) ? 'test1' : $test);
var_dump((null == $test2) ? 'test2' : $test);
var_dump((isset($test3)) ? 'test3' : $test);

次の出力が得られます。

Notice: Undefined variable: test1 in C:\home\ombrelle.co.uk\templates_core\test.php on line 6
string(5) "test1"

Notice: Undefined variable: test2 in C:\home\ombrelle.co.uk\templates_core\test.php on line 7
string(5) "test2"

Notice: Undefined variable: test in C:\home\ombrelle.co.uk\templates_core\test.php on line 8
NULL

ここで、3 項ステートメントでは、前述の作業で、まだ通知がありますが、isset()メソッドはまったく機能しません。通知を表示せずに、これを適切に行うにはどうすればよいでしょうか。

結局のところ、通知は無意味であり、エラー ログに送信されるべきではないことを受け入れるだけでよいのでしょうか。それとも、考慮すべきその他の注意事項はありますか?

現在、多くのエラーの古いシステムをクリーンアップしています。エラーを見逃したくはありませんが、エラーをさらに作成しても意味がありません。この問題に関する信頼できる読み物へのリンクも大歓迎です。

4

2 に答える 2

0

私が考えることができる唯一の違いは(あなたが投稿したリンクされた回答の回答のように、はるかに遅いことを除いて)、恐ろしい演算子is_nullを使用できることです:@

<?php
    error_reporting(E_ALL);

    var_dump($foo === null); //Notice
    var_dump(@is_null($foo)); //No notice
?>

デモ

つまり、変数が存在するかどうかわからない場合は、issetand notを使用する必要がありますis_null

それに加えて、PHP で変数の存在をテストする最良の方法に興味があるかもしれません。isset() は明らかに壊れています

于 2014-03-03T10:49:22.637 に答える