如此而来,NULL仅仅是少一个赋值 4 bytesBerdasarkan jenis zvalphp 5.6 (struktur telah berubah dalam PHP 7)
rrreee
Nilai type
zend_uchar type boleh menjadi
rrreee
PHP membezakan jenis pembolehubah berdasarkan type🎜
Kesimpulan
🎜Jadi null tidak mempunyai kelebihan istimewa untuk php berbanding dengan bool/long🎜
Tiada kelebihan
🎜null pembolehubah bermakna zvalue_value value tidak perlu diberikan nilai Berbanding dengan String dan Array, yang memerlukan sejumlah besar aplikasi memori Yang berkata, ia masih mempunyai kelebihan tertentu, tetapi berbanding dengan LONG dan BOOL, kelebihan prestasi ini pada dasarnya boleh diabaikan seperti berikut: 🎜
Apakah itu zVal
🎜Sekecil nilai bool, sebesar tatasusunan komposit, dalam pelaksanaan teras php, kesemuanya adalah struktur zVal bahasa C. Ringkasnya, ia adalah pernyataan PHP berikut: 🎜
rrreee
🎜Pembolehubah di atas, apabila /usr/bin/php dilaksanakan ke baris ini, akan ditukar kepada nilai zVal structure dan type dalam ingatan Ia telah dijelaskan di atas, dan sekarang kami akan menerangkan bagaimana nilainya akan disimpan, 🎜
Struktur zvalue_value value
🎜Nilai pembolehubah PHP disimpan dalam pembolehubah zvalue_value value, dengan struktur zvalue_value adalah seperti berikut: 🎜
rrreee
🎜kesatuan ialah kesatuan dalam bahasa C, yang bermaksud bahawa hanya satu ahli akan berkuat kuasa pada satu-satu masa Cirinya ialah panjang 🎜memori🎜=🎜panjang antara ahli paling lama🎜 . Ahli yang digunakan oleh pembolehubah PHP adalah seperti berikut: 🎜
rrreee
🎜🎜Pelaksanaan Objek, Sumber dan Array akan menjadi sangat rumit dan tidak dibincangkan dalam artikel ini untuk butiran, sila semak hiperpautan di bahagian bawah teks. 🎜
🎜Mengikut jadual di atas, selepas menetapkan type = IS_NULL kepada pembolehubah jenis NULL, tidak perlu untuk menetapkan value dan 0/ false Tugasan Selepas menetapkan type = IS_BOOL / IS_LONG, tambah satu lagi tugasan value.lval = 0;: 🎜
🎜Walau bagaimanapun, tidak kira sama ada ahli dalam value diberi nilai atau tidak, zvalue_value value masih 🎜perlu mengisi memori 🎜, 🎜
🎜Dengan cara ini, NULL hanyalah kurang satu proses untuk memperuntukkan memori 4 bait, tetapi dari perspektif CPU moden, 🎜kelebihan ini boleh diabaikan🎜. 🎜
🎜Sila lihat http://www.php-internals.com/...🎜 untuk butiran
根据
php 5.6
的zval
类型(PHP 7
中结构有变化)zend_uchar type
的type
的值可以为PHP是根据
type
来区分变量的类型结论
所以
null
对php
来说,与bool
/long
对比, 并没有什么特殊的优势没有优势
null
变量,表示zvalue_value value
无需赋值,相比String
、Array
需要申请大量内存的操作来说,还是具备一定的优势,但是对比LONG
、BOOL
来说,这点性能优势基本可以忽略,解释如下:zVal 是什么
小到一个bool值,大到一个复合数组,在
php
核心实现中,都是C语言的zVal结构
。归纳起来,也就是如下PHP声明:
以上变量,在
/usr/bin/php
执行到这行时,都会在内存中转化为zVal结构
,type
的值上面已经讲解过,下面讲解其值将如何存储,zvalue_value value
的结构PHP变量的值存储在
zvalue_value value
变量中,其中zvalue_value
的结构如下:union
在C语言里面是一个联合体
,表示一次只会一个成员生效,其特点是内存的长度=最长的那个成员长度。PHP变量使用的成员如下:
根据上表,
NULL
类型的变量在设置type = IS_NULL
之后,而无需赋值value
而
0/false
赋值在设置type = IS_BOOL / IS_LONG
之后,再多一句赋值value.lval = 0;
的操作:然而不论
value
中的成员
是否赋值,zvalue_value value
都是需要占用内存的,如此而来,
NULL
仅仅是少一个赋值4 bytes
Berdasarkan jeniszval
php 5.6
(struktur telah berubah dalamPHP 7
) rrreee Nilaitype
zend_uchar type
boleh menjadirrreee
PHP membezakan jenis pembolehubah berdasarkantype
🎜Kesimpulan
🎜Jadinull
tidak mempunyai kelebihan istimewa untukphp
berbanding denganbool
/long
🎜Tiada kelebihan
🎜null
pembolehubah bermaknazvalue_value value
tidak perlu diberikan nilai Berbanding denganString
danArray
, yang memerlukan sejumlah besar aplikasi memori Yang berkata, ia masih mempunyai kelebihan tertentu, tetapi berbanding denganLONG
danBOOL
, kelebihan prestasi ini pada dasarnya boleh diabaikan seperti berikut: 🎜Apakah itu zVal
🎜Sekecil nilai bool, sebesar tatasusunan komposit, dalam pelaksanaan terasphp
, kesemuanya adalahstruktur zVal
bahasa C.Ringkasnya, ia adalah pernyataan PHP berikut: 🎜 rrreee 🎜Pembolehubah di atas, apabila
/usr/bin/php
dilaksanakan ke baris ini, akan ditukar kepada nilaizVal structure
dantype
dalam ingatan Ia telah dijelaskan di atas, dan sekarang kami akan menerangkan bagaimana nilainya akan disimpan, 🎜Struktur
🎜Nilai pembolehubah PHP disimpan dalam pembolehubahzvalue_value value
zvalue_value value
, dengan strukturzvalue_value
adalah seperti berikut: 🎜 rrreee 🎜Ahli yang digunakan oleh pembolehubah PHP adalah seperti berikut: 🎜 rrreee 🎜🎜Pelaksanaan
type = IS_NULL
kepada pembolehubah jenisNULL
, tidak perlu untuk menetapkanvalue
dan
0/ false
Tugasan Selepas menetapkantype = IS_BOOL / IS_LONG
, tambah satu lagi tugasanvalue.lval = 0;
: 🎜 🎜Walau bagaimanapun, tidak kira sama adaahli
dalamvalue
diberi nilai atau tidak,zvalue_value value
masih 🎜perlu mengisi memori 🎜, 🎜 🎜Dengan cara ini,NULL
hanyalah kurang satu proses untuk memperuntukkan memori4 bait
, tetapi dari perspektif CPU moden, 🎜kelebihan ini boleh diabaikan🎜. 🎜 🎜Sila lihat http://www.php-internals.com/...🎜 untuk butiranIa boleh diabaikan dalam projek sebenar