ホームページ >php教程 >php手册 >isset と is_null の違い

isset と is_null の違い

WBOY
WBOYオリジナル
2016-06-21 08:52:49897ブラウズ

isset と is_null の違いは何ですか?

マニュアルによれば、isset と is_null の機能はほぼ完全に「正反対で同じ」です。

isset は is_null の反対のエイリアスですか?

ねえ、違いについて話したいなら、本当にたくさんあります~

すべての違いは、is_null が関数であり、isset がステートメントであるためです。

isset は echo や print と同様に、PHP 自体の言語構造です。

そして is_null は関数であり、通常の関数と同じように、変数関数として呼び出すことができます。

「わかった、わかった、関数とステートメントの違いは知っていますが、TMD の違いは何ですか?

」と思われるかもしれません。

いわゆるステートメントと言語構造は、言語自体によってサポートされているステートメントと識別子です。

たとえば、foreach、 continue などは、構文解析の時点で「消去」 (論理的に置き換えられます)

します。

isset ステートメントが構文分析プロセス中にどのように「消去」されるかを見てみましょう。

1. まず、字句解析中に isset が T_ISSET 識別子として認識されます。

2. 構文分析ステージでは、isset($var) 命令がオペコード ZEND_ISSET_ISEMPTY_VARS.

に分析されます。

isset は、コンパイル/実行前に展開された C 言語のマクロのようなものであることが理解できます。

このため、パフォーマンスに次のような違いが生じます:

is_null は関数であるため、次の方法で呼び出すことができます:

$var = NULL;

$func = "is_null";

$func($var);

?>

ただし、isset はステートメントであるため、このように呼び出すことはできません。

is_null は関数であるため、関数の戻り値をパラメータとして受け入れることができますが、isset は受け入れられません (もちろん、PHP がサポートしたい場合は実際には可能ですが、コンパイル段階の複雑さが増加します):

is_null(intval("0x45"));

//わかりました

isset(intval("0x45"));

//PHP 致命的エラー: 書き込みコンテキストで関数の戻り値を使用できません

is_null(NULL);

//わかりました

isset(NULL);

//PHP 解析エラー: 構文エラー

?>

isset の多くの欠点について述べてきましたが、次にその利点について話しましょう:

isset はステートメントなので速いです

1,000 万回の単純な検出ステートメントのループにおける比較結果は次のとおりです:

$a="ラルエンス":

isset($a); //時間: 1.15秒

is_null($a); //時間: 3.89秒

?>

isset は isset と呼ばれるため、未定義の変数を検出しても NOTICE:

は生成されません。

isset($larence);

//わかりました

is_null($larence);

//PHP 注意: 未定義変数: laruence

?>

それでは、いつ isset を使用し、いつ is_null を使用するかについて、どのような提案がありますか?

ねえ、私の提案は、関数が行うべきことを関数を使用することです。それはナンセンスのように聞こえますか?

isset => 変数は設定されていますか?

is_null => 変数は NULL ですか?

さらに、is_null を使用したい場合は、代わりに「=== NULL」を使用することをお勧めします。is_null と同じセマンティクスを持つだけでなく、結果も同じで、速度も isset とほぼ同じです。 >

1,000 万回の単純な検出ステートメントのループにおける比較結果は次のとおりです:

$a="ラルエンス":

isset($a); //時間: 1.15秒

is_null($a); //時間: 3.88秒

$a===NULL; //時間: 1.22秒

?>



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。