我們解壓PHP的源碼包, 看到如下的目錄
創新互聯是一家專業提供屯留企業網站建設,專注與成都做網站、成都網站設計、H5高端網站建設、小程序制作等業務。10年已為屯留眾多企業、政府機構等服務。創新互聯專業網絡公司優惠進行中。
其中,
最核心的---Zend目錄, 這是zend虛擬的實現. 包括棧,數據類型,編譯器等,都在這實現.
最主要的main --PHP的一些內建函數,最主要函數都在這里放著.
最大的一個目錄ext -- PHP的擴展.
PHP的大部分功能,都是以extenstion形式來完成的.
如果你開發了一個擴展,也放在ext目錄下.
Zend對變量的表示:
答: zend實現了 zval結構體
{
value: [聯合體] ,聯合體的內容可能是C語言中的long,double,hashtable...
type:變量類型 , IS_NULL,IS_BOOL,IS_STRING...... IS_RESOURCE
refcount_gc
is_ref_gc
}
如:
$a = 3;
{
value : [long lval = 3]
type: IS_LONG
}
$a = 3.5
{
value: [double dval = 3.5]
type:IS_DOUBLE
疑問:
PHP中有8種數據類型,為什么zval-value 聯合體中,只有5種?
答:
1: NULL,直接 zval-type = IS_NULL,就可以表示,不必設置 ?value的值.
2: BOOL型 , zval-type = IS_BOOL, 再設置 zval.value.lval = 1/0;
3: Resourc型 ,資源型 往往是服務器上打開的一個接口,如果 文件讀取接口.
zval-type = IS_RESOURCE, zval-tyoe.lval =服務器上打開的接口的編號
發現:
PHP中,字符串類型,長度是已經緩存的,調用strlen時,系統可以直接返回其長度,不必計算.
一句話解釋就是“PHP中下標符號可應用于數組,對象和字符串”
PHP 數組的底層主要是通過 HashTable 實現,HashTable 通過映射函數或者散列函數將 String Key 轉換成一個普通的數字下標,然后再將 Value 值存儲到下標對應的數組元素中
HashTable 主要包含兩部分:1.存儲元素的數組 2.散列函數或者映射函數
隨機訪問
如果我們指定一個 Key=Value 的映射關系,Key 是一個 String 類型的,則先通過 Time 33 算法將 String 轉換成一個 Int 整型,然后再通過 PHP 里面特定的散列算法映射成 Bucket 數組中的一個下標,將 Value 值存儲到對應的下標元素中,當我們通過 Key 訪問數組元素時,只需要再通過相同的算法計算出對應的 Key,就能實現隨機訪問數組元素
順序訪問
存儲在 HashTable 中的數組是無序的,但是 PHP 中的數組是有序的,為了實現 HashTable 的有序性,PHP 引入了一個中間映射表,該表是一個大小和 Bucket 數組相同的數組,數組中存放的是整形數據,主要用于存放元素實際存儲的 Value 的下標值,當引入中間映射表之后,Bucket 中的數據是有序的,而中間映射表中的數據是無序的,當我們順序訪問的時候只需要遍歷 Bucket 中的數據即可
Hash 沖突
PHP 解決 Hash 沖突采用的是鏈地址法,將出現沖突的 Bucket 串成鏈表,這樣通過中間映射表映射出來的就不再是一個元素而是一個鏈表,通過散列函數定位到對應的 Bucket 鏈表時,需要遍歷鏈表,逐個對比 key 值,直至找出對應的目標值
PHP 實現擴容
1.當刪除的元素所占比例超出閾值的時候,則需要移除已經被邏輯刪除的 Bucket,將后面的 Bucket 補位到前面,因為 Bucket 的下標發生了變動,所以需要更新每元素在中間映射表中實際存儲的下標值
2.當沒有超出閾值的時候,PHP 會申請一個大小是原來兩倍的新數組,并將舊數組中的數據復制到新數組中,因為數組長度發生了變化,所以 key-value 的映射關系需要重新計算,這個就是重建索引
借用“短發人”的數據,手工完善一下。
boolean (布爾型) 一般用于判斷,true或false。比如是否檢測,是否完成,是否畢業等。
integer (整型)一般用于年齡,數量等沒有小數點的計算。比如1 2 33 -9等。
float (浮點型, 也稱作 double) 一般用于金錢,面積、體積等科學,含小數點的計算。比如3.1415926585897932
string (字符串)一般用于人名,物品等常規字符串。比如“張三”“桌子”“我來了”
array (數組)一般用于復雜數據處理,可以多維數據結構,可以放布爾、整型、浮點、字符、數組等。
object (對象) 一般用于面向對象,里面包含方法和變量。
當前標題:php數據類型底層結構 php8種數據類型
網頁路徑:http://www.yijiale78.com/article14/ddjooge.html
成都網站建設公司_創新互聯,為您提供自適應網站、響應式網站、建站公司、搜索引擎優化、網站建設、軟件開發
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯