isset と is_null_PHP の違いを解析するチュートリアル

WBOY
リリース: 2016-07-21 14:59:52
オリジナル
837 人が閲覧しました

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"));
/ /OK
isset(intval("0x45")) ;
//PHP 致命的なエラー: 書き込みコンテキストで関数の戻り値を使用できません
is_null(NULL);
//OK
isset(NULL);
//PHP解析エラー: 構文エラー
?>


isset の欠点をたくさん述べたので、その利点について話しましょう:
isset はステートメントであるため、高速です
1,000 万回の単純なテスト ステートメント ループでは、比較結果は次のとおりです:



コードをコピーします
コードは次のとおりです:$a="laruence":
isset($a); //所要時間: 1.15秒
is_null($a); //所要時間: 3.89s
?>

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


コードをコピーします
コードは次のとおりです以下:isset($laruence);
// OK
is_null($laruence);
//PHP Notice: 未定義変数: laruence
?>


それでは、どのような提案をすればよいでしょうかisset をいつ使用するか、いつ is_null を使用するかについて考えてください。
私の提案は、関数が行うべきことを実行するために関数を使用するというものです。
isset => 変数は設定されていますか?宣言されています)?
is_null => is null? => 変数は NULL ですか?
さらに、is_null を使用する場合は、同じセマンティクスを持つだけでなく、"=== NULL" を使用することをお勧めします。 is_null と同様、結果は同じで、速度も isset とほぼ同じです:
1,000 万回の単純なテスト ステートメント ループでの比較結果は次のとおりです:



コードをコピーします
コードは次のとおりです:次のように: $a="laruence":
isset($a); //時間: 1.15秒
is_null($a) //使用時間: 3.88秒
$a==; =NULL; //使用時間: 1.22秒
?>





http://www.bkjia.com/PHPjc/328125.html

www.bkjia.com

http://www.bkjia.com/PHPjc/328125.html技術記事 isset と is_null の違いは何ですか? マニュアルによれば、isset と is_null の機能はほぼ完全に「反対で同じ」です... isset は is_null の反対のエイリアスですか? ..
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート