-- 會員 / 註冊 --  
 帳號:
 密碼:
  | 註冊 | 忘記密碼
3/26 新書到! 3/19 新書到! 3/14 新書到! 12/12 新書到!
購書流程Q & A站務留言版客服信箱
3ds MaxMayaRhinoAfter EffectsSketchUpZBrushPainterUnity
PhotoShopAutoCadMasterCamSolidWorksCreoUGRevitNuke
C#CC++Java遊戲程式Linux嵌入式PLCFPGAMatlab
駭客資料庫搜索引擎影像處理FluentVR+ARANSYS深度學習
單晶片AVROpenGLArduinoRaspberry Pi電路設計CadenceProtel
HadoopPythonStm32CortexLabview手機程式AndroidiPhone
可查書名,作者,ISBN,3dwoo書號
詳細書籍分類

PHP 7底層設計與源碼實現

( 簡體 字)
作者:陳雷 黃桃 李長林 李志 王坤 肖濤 朱棟 編著類別:1. -> 程式設計 -> 網路編程 -> PHP
譯者:
出版社:機械工業出版社PHP 7底層設計與源碼實現 3dWoo書號: 49092
詢問書籍請說出此書號!

缺書
NT售價: 495

出版日:5/1/2018
頁數:424
光碟數:0
站長推薦:
印刷:黑白印刷語系: ( 簡體 版 )
加入購物車 加到我的最愛
(請先登入會員)
ISBN:9787111599197
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證)
作者序:

譯者序:

前言:

為什么要寫這本書

工作了10多年,一直沒有想過要寫一本書。一年前,團隊的張晶晶同學建議,我們能不能組織大家每天一起學習和討論,這樣也許會成長得更快。當時我感覺這是一個非常好的建議,但是也有隱隱的擔憂,因為根據經驗,多個人一起學習很難長期持續。但是看到晶晶同學渴望的眼神,我決定試一試,于是我建立了一個學習圈,發給團隊的同事們,他們可以自愿參加,學習的時間是每天早上8:50∼10:30,正好不影響工作,但是早晨要提前100分鐘來公司,學習的內容是研讀工作中使用的LNMP源碼,首先學習和研究的就是PHP 7的源碼。出乎意料,團隊幾乎所有的同事都參加了這個學習圈,包括實習生。

而這個學習圈一直堅持到現在,真是風雨無阻,大家已經習慣了按時一起討論、研究,遇到問題時大家各自查找相關資料,頓悟難題時大家欣喜若狂。最令我欣喜的是,學習圈的同事們的快速成長,后來我們這個學習圈加入了滴滴公司的學習圈,得到了更多的資源支持。在學習過程中,我們每天都會記錄日志,時間久了,發現得到了一個豐富的知識庫,于是大家提議,寫一本書,這樣我們決定寫一本PHP 7源碼學習和研究的書,希望我們整理的資料能夠幫助有意愿研究PHP 7源碼的讀者。

做了這個決定后,學習圈里的李長林、李志、黃桃、肖濤、王坤、季偉濱、朱棟和我一起編寫了這本書,大家在工作之外,每天寫書到深夜,周末從此是路人,經過半年的編寫和校對,終于完成了這本書。我們希望給那些想要了解PHP 7底層實現的讀者一些啟發,幫助更多的人理解PHP 7的實現,也希望能夠傳播這種堅持學習的精神。

讀者對象

PHP工程師

對PHP內部實現感興趣的讀者

有C語言基礎的讀者

其他對PHP語言感興趣的人

如何閱讀本書

本書內容上分為四篇,共計14章內容。

第一篇(第1∼2章)介紹PHP 7的概況和源碼整體框架。其中,第1章主要介紹PHP的歷史和PHP 7的新特性,以及研讀源碼的方法,第2章介紹PHP 7源碼的整體框架,包括各目錄的源碼和功能。

第二篇(第3∼6章)詳細介紹PHP 7的變量實現。其中,第3章介紹基本變量zval的結構,第4章詳細闡述字符串zend_string的實現,第5章介紹PHP 7中的核心結構HashTable的實現,也就是數組的實現,第6章介紹類和對象的實現。

第三篇(第7∼11章)介紹PHP 7核心的實現。其中,第7章主要的內容是PHP 7的生命周期,第8章介紹生命周期的模塊初始化階段中配置文件的解析,第9章主要闡述內存管理的原理和實現,第10章介紹詞法和語法分析的實現,第11章介紹核心Zend虛擬機的實現。

第四篇(第12∼14章)主要介紹PHP 7中語法的實現。其中,第12章主要介紹基本語法的實現,第13章主要介紹函數的實現,第14章主要講解擴展的實現。

其中,第3章、第4章、第5章和第14章為本書的重點章節,如果你沒有充足的時間完成全書的閱讀,可以選擇性地進行重點章節的閱讀。如果你是一位有著一定經驗的資深人員,本書可能會是一本不錯的案頭書。然而,如果你是一名初學者,在開始本書閱讀之前,建議先進行一些C語言和PHP的基礎理論知識的學習。
致謝

感謝盧紅波、伍星兩位工作導師的支持,前者是我在滴滴公司的領導,也是我管理和技術上的導師,后者是我職業生涯的啟蒙導師,一直引領我前進到現在。

感謝Swoole團隊韓天峰、王晶兩位兄弟的指導和支持,他們在技術上給了我非常多的指點。

感謝李長林、李志、黃桃、肖濤、王坤、季偉濱、朱棟7位兄弟在學習和研究過程中的陪伴和合作,本書是幾位兄弟共同合作的結晶。

特別致謝

最后,我要特別感謝我的太太夢云、兒子和女兒,為寫作這本書,我犧牲了很多陪伴他們的時間,但也正因為有了他們的付出與支持,我才能堅持寫下去。

同時,感謝我的父母、岳父岳母,特別是我的父母,不遺余力地幫助我們照顧兒女,有了他們的幫助和支持,我才有時間和精力去完成寫作工作。

另外要感謝我團隊的兄弟們,感謝他們的堅持,為他們的成長點贊!

最后要重點感謝高婧雅編輯,得益于她的耐心審稿,寶貴的建議以及用心的修改,才進一步提升了本書的質量。

謹以此書獻給我最親愛的家人,以及眾多熱愛PHP的朋友!



陳 雷
內容簡介:

滴滴出行專家聯合撰寫,多位PHP領域大咖推薦,全面吃透PHP底層設計不二之選,全面講解PHP內核架構、核心構成與內存管理、詞法與句法解析、Zend 虛擬機、函數及關鍵擴展等設計細節與源碼實現。本書邏輯上分為四部分,共計14章內容。

第1∼2章解讀PHP 7的新特性、源碼的整體框架(各目錄的源碼和功能)。

第3∼6章詳細介紹PHP 7的變量實現,涵蓋基本變量zval的結構、字符串zend_string的實現、核心結構HashTable(即數組)實現,以及類與對象的實現。

第7∼11章剖析PHP 7核心的實現,重點是PHP 7的生命周期,涵蓋生命周期的模塊初始化階段中配置文件的解析,內存管理原理與實現,詞法和語法分析的實現,核心Zend虛擬機的實現。

第12∼14章介紹PHP 7中基本語法、函數、擴展的實現。

其中,第3章、第4章、第5章和第14章為本書的重點章節。
目錄:

本書贊譽

前言
第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
11.2.6 執行棧291
11.3 AST編譯過程294
11.3.1 op_array初始化 294
11.3.2 AST編譯295
11.3.3 設置指令handler307
11.4 執行過程308
11.4.1 執行棧分配309
11.4.2 初始化execute_data309
11.4.3 調用hanlder函數執行311
11.4.4 釋放execute_data315
11.5 其他調度方式315
11.6 本章小結316
第12章 基本語法實現317
12.1 條件判斷317
12.2 循環語句322
12.2.1 foreach語句322
12.2.2 while語句324
12.2.3 for語句327
12.2.4 do while語句329
12.3 中斷與跳轉331
12.3.1 break的實現331
12.3.2 goto的實現335
12.4 文件引入338
12.5 異常/錯誤處理339
12.6 本章小結343
第13章 函數實現344
13.1 基礎知識 344
13.2 用戶定義函數的編譯345
13.3 用戶定義函數的執行352
13.4 內置函數358
13.4.1 內置函數的注冊358
13.4.2 內置函數的執行360
13.5 本章小結360
第14章 擴展361
14.1 擴展的實現原理362
14.2 PHP擴展363
14.2.1 擴展的實現363
14.2.2 JSON擴展366
14.3 Zend擴展367
14.3.1 Zend擴展的實現367
14.3.2 opcache擴展369
14.4 自定義擴展378
14.4.1 初始化379
14.4.2 編譯配置380
14.4.3 功能實現381
14.4.4 注冊配置項383
14.4.5 編譯、安裝385
14.5 本章小結386
附錄A php.ini配置項說明387
附錄B Token與opcode含義對應表413
序: