検索

ホームページ  >  に質問  >  本文

PHPではnullはfalseや0より効率的ですか?

null のメモリ アドレス空間には値がないが、他の 2 つはアドレスがあると推測するためです

伊谢尔伦伊谢尔伦2795日前491

全員に返信(2)返信します

  • PHPz

    PHPz2017-05-16 13:19:02

    以下の議論はすべてPHP 5

    に基づいています

    構造はphp 5.6zval类型(PHP 7に応じて変更されます)

    リーリー

    zend_uchar typetypeの値は

    になります リーリー

    PHP は type

    に基づいて変数の型を区別します。

    結論

    つまりnullphp来说,与bool/long比較して、特別な利点はありません

    メリットなし

    null变量,表示zvalue_value value无需赋值,相比StringArray需要申请大量内存的操作来说,还是具备一定的优势,但是对比LONGBOOL パフォーマンスの観点からは、このパフォーマンスの利点は基本的に無視できます。説明は次のとおりです。

    zVal

    とは

    では、

    はブール値と同じくらい小さく、複合配列と同じくらい大きくなります。 php核心实现中,都是C语言的zVal结构要約すると、次の PHP ステートメントになります:
    リーリー

    上記の変数は、この行まで /usr/bin/php を実行すると、メモリ内で zVal 構造体 に変換されます。

    の値は上で説明しました。その値がどのように保存されるかについては以下で説明します /usr/bin/php执行到这行时,都会在内存中转化为zVal结构type

    zvalue_value valueの構造

    PHP 変数の値は

    変数に保存されます。zvalue_value の構造は次のとおりです。 zvalue_value value变量中,其中zvalue_value リーリー

    は、一度に1つのメンバーのみが有効であることを意味し、その特徴は、union在C语言里面是一个联合体メモリの長さ=最も長いメンバーの長さであることです。 PHP変数で使用されるメンバーは次のとおりです: リーリー

    の実装は非常に複雑なので、この記事では説明しません。詳細については、本文の下部にあるハイパーリンクを確認してください。

    ObjectResourceArray上記の表によれば、NULL 型の変数に type = IS_NULL を設定した後、value を割り当てる必要はありません

    および < code>0/false割り当て type = IS_BOOL / IS_LONG を設定した後、もう 1 つの割り当て value.lval = 0; を追加します。
    ただし、valuemember に値が割り当てられているかどうかに関係なく、

    メモリを占有する必要があります NULL类型的变量在设置type = IS_NULL之后,而无需赋值value
    0/false赋值在设置type = IS_BOOL / IS_LONG之后,再多一句赋值value.lval = 0;

    これはvalue中的成员是否赋值,zvalue_value valueメモリのプロセスですが、現代のCPUから見ると、この利点は無視できます

    詳細は http://www.php-internals.com/...NULL仅仅是少一个赋值 4 bytes をご覧ください。

    返事
    0
  • 世界只因有你

    世界只因有你2017-05-16 13:19:02

    実際のプロジェクトでは無視できます

    返事
    0
  • キャンセル返事