PHP7 底層設計與源碼實現
內容描述
本書分為四大部分,共計14章內容。第1篇(第1~2章)主要介紹PHP7的新特性,以及研讀源碼的方法、PHP7源碼結構等。第2篇(第3~6章)會詳細介紹PHP7的變量實現,涵蓋基本變量zval的結構,字符串zend_string的實現,PHP7中的核心結構HashTable的實現,類和對象的實現。第3篇(第7~11章)介紹PHP7核心的實現,涵蓋PHP7的生命周期及其模塊初始化階段中配置文件的解析,內存管理的原理和實現,詞法和語法分析的實現,核心Zend虛擬機的實現。第4篇(第12~14章)主要介紹PHP7中語法的實現,涵蓋基本語法的實現,函數的實現,擴展的實現。
目錄大綱
第1章PHP 7概況1
1.1 PHP簡史與新特性1
1.2 PHP 7安裝和調試7
1.2.1編譯安裝7
1.2.2使用GDB調試PHP 78
1.2.3 vld擴展10
1.3 PHP 7源碼閱讀工具介紹13
1.3.1 Source Insight13
1.3.2 Understand16
1.3.3 Vim+Ctags19
1.4本章小結20
第2章初識PHP 7源碼整體框架21
2.1 PHP 7語言的執行原理21
2.1.1編譯型語言與解釋型語言21
2.1.2 PHP 7的執行原理概述23
2.2 PHP 7內核架構26
2.3 PHP 7源碼結構初步介紹27
2.3.1 sapi目錄源碼27
2.3.2 Zend目錄源碼28
2.3.3 main目錄源碼29
2.3.4 ext目錄源碼29
2.3.5 TSRM目錄源碼29
2.4本章小結30
第3章基本變量31
3.1基本知識31
3.1.1數據類型31
3.1.2結構體與聯合體32
3.1.3堆和棧的基本知識34
3.2變量的類型和實現35
3.2.1 PHP 5的zval35
3.2.2 PHP 7的zval37
3.2.3 PHP 7變量類型40
3.2.4整型和浮點型41
3.2.5字符串類型42
3.2.6數組43
3.2.7引用43
3.2.8間接zval44
3.2.9常量和常量AST46
3.2.10資源類型47
3.2 .11對象47
3.3變量的作用域49
3.3.1全局變量49
3.3.2局部變量49
3.3.3中間變量50
3.3.4靜態變量51
3.3.5常量51
3.4對垃圾回收的支持51
3.4.1 gc的基本結構52
3.4.2引用計數53
3.4.3循環引用問題55
3.4.4垃圾回收55
3.5本章小結63
第4章字符串64
4.1字符串的結構64
4.1.1 PHP 7字符串的具體實現65
4.1.2字符串的二進制安全68
4.1.3 zend_string API69
4.2智能字符串72
4.2.1 smart_str對比smart_string72
4.2.2智能字符串的具體實現73
4.2.3 smart_str API75
4.3進階76
4.3.1字符串的賦值與寫時分離76
4.3.2字符串的類別(內部字符串)79
4.3.3字符串的類型轉換84
4.3.4字符串的雙引號與單引號87
4.3.5 PHP常用字符串操作函數實現90
4.4本章小結92
第5章數組的實現93
5.1基本概念93
5.1.1數組的語義93
5.1.2數組的概念94
5.2 PHP 5數組的實現95
5.3 PHP 7數組的實現99
5.3.1基本結構100
5.3.2初始化105
5.3.3 packed array和hash array的區別114
5.3.4插入、更新、查找和刪除123
5.3.5哈希衝突的解決130
5.3.6擴容和rehash操作132
5.3.7數組的遞歸保護134
5.4本章小結135
第6章面向對象136
6.1類的種類136
6.1.1普通類136
6.1.2抽像類137
6.1.3接口138
6.1.4特性140
6.1.5 final類142
6.1.6匿名類142
6.2類的特性143
6.2.1類的屬性143
6.2.2訪問控制143
6.3類的實現144
6.3.1類的結構144
6.3.2靜態屬性、常量和方法149
6.3.3接口和特性151
6.3.4繼承152
6.4對象的實現155
6.4.1實現155
6.4.2普通屬性156
6.5其他特性157
6.5.1魔術方法157
6.5.2自動加載157
6.6本章小結159
第7章生命週期160
7.1基礎知識160
7.1.1信號處理160
7.1.2 SAPI簡介164
7.1.3 SAPI核心結構SG(v)166
7.2 CLI模式的生命週期167
7.2.1模塊初始化階段168
7.2.2請求初始化階段175
7.2.3執行階段177
7.2.4請求關閉階段178
7.2.5模塊關閉階段179
7.2.6其他工作180
7.3 FPM模式的生命週期181
7.3.1多進程管理182
7.3.2網絡編程193
7.3.3 FastCGI協議195
7.4其他模式200
7.5本章小結201
第8章配置文件解析202
8.1配置文件簡介202
8.2配置基本語法203
8.3配置文件的加載204
8.4擴展配置208
8.5運行時的配置212
8.6本章小結213
第9章內存管理214
9.1內存管理的意義214
9.2內存管理的準備知識216
9.2.1基本概念216
9.2.2內存對齊218
9.3內存管理的數據結構219
9.3.1 _zend_mm_heap219
9.3.2 _zend_mm_chunk223
9.4內存管理的詳細實現226
9.4.1內存管理初始化227
9.4.2內存申請227
9.4.3內存管理之huge內存229
9.4.4內存管理之large內存230
9.4.5內存管理之small內存231
9.5內存回收234
9.6本章小結235
第10章詞法和語法分析236
10.1基礎知識236
10.1.1編譯器237
10.1.2源程序分析237
10.1.3 BNF範式241
10.2詞法與語法分析器242
10.2.1 Lex與YACC242
10.2.2 Re2c與Bison247
10.3 Token類型252
10.4 PHP 7詞法與語法相關數據結構253
10.4.1 CG(v)宏253
10.4.2 zend_stack255
10.4.3 zend_ast相關結構255
10.4.4 zend_arena262
10.4.5 zend_parser_stack_elem262
10.5 PHP 7詞法與語法分析263
10.5.1整體過程263
10.5.2詞法與語法分析階段263
10.6 AST的優勢273
10.7源碼中的其他使用275
10.8本章小結275
第11章Zend虛擬機276
11.1基礎知識276
11.1.1 Zend虛擬機架構276
11.1.2符號表278
11.1.3函數調用棧278
11.1.4指令280
11.2相關數據結構281
11.2.1 EG(v)281
11.2.2符號表281
11.2.3指令284
11.2.4指令集288
11.2.5執行數據290