●前言
章面向對像思想的核心概念1
1.1面向對像的“形”與“本”2
1.1.1對像的“形”2
1.1.2對像的“本”4
1.1.3對像與數組6
1.1.4對像與類6
1.2魔術方法的應用8
1.2.1set和get方法8
1.2.2call和callStatic方法11
1.2.3toString方法和debugInfo方法13
1.3命名空間與自動加載18
1.3.1理解命名空間18
1.3.2自動加載21
1.4繼承與多態21
1.4.1類的組合與繼承22
1.4.2各種語言中的多態26
1.5面向接口編程30
1.5.1接口的作用30
1.5.2對PHP接口的思考32
1.6反射35
1.6.1如何使用反射API35
1.6.2反射有什麼作用37
1.7異常和錯誤處理39
1.7.1如何使用異常處理機制39
1.7.2怎樣看PHP的異常45
1.7.3PHP中的錯誤級別45
1.7.4PHP中的錯誤處理機制47
1.7.5PHP7對異常機制的改進49
1.8本章小結53
第2章面向對像的設計原則54
2.1面向對像設計的五大原則55
2.1.1單一職責原則55
2.1.2接口隔離原則63
2.1.3開放-封閉原則66
2.1.4替換原則69
2.1.5依賴倒置原則71
2.2一個面向對像留言本的實例73
2.3面向對像的思考77
2.4本章小結78
第3章PHP網絡技術及應用79
3.1HTTP協議詳解79
3.1.1HTTP協議與HTTP/2協議79
3.1.2HTTP協議如何工作81
3.1.3HTTP應用:模擬灌水機器人86
3.1.4垃圾信息防御措施92
3.2抓包工具96
3.2.1抓包工具分類96
3.2.2Fiddler功能與原理96
3.2.3安裝Fiddler97
3.2.4Fiddler基本界面98
3.2.5使用Fiddler進行HTTP斷點調試101
3.3Socket進程通信機制及應用104
3.3.1進程通信相關概念104
3.3.2Socket演示:實現服務器端與客戶端的交互105
3.3.3使用wireshar分析TCP/IP數據包108
3.3.4Socket函數原型114
3.3.5PHP中的Socket函數114
3.3.6Socket交互應用:使用Socket抓取數據117
3.4cURL工具及應用119
3.4.1建立cURL請求的基本步驟119
3.4.2檢查cURL錯誤和獲取返回信息120
3.4.3在cURL中偽造頭信息122
3.4.4在cURL中用POST方法發送數據124
3.4.5使用cURL實現簡單的文件上傳服務125
3.4.6cURL批處理129
3.4.7cURL設置項130
3.5簡單郵件傳輸協議SMTP131
3.5.1SMTP協議如何工作132
3.5.2SMTP協議常用命令133
3.5.3SMTP協議應用:使用Socket發送郵件133
3.6WebService的前世今生138
3.6.1WebService簡介138
3.6.2Web服務的實現模式138
3.6.3簡單對像訪問協議SOAP140
3.6.4調試工具soapUI145
3.7Cookie詳解148
3.7.1Cookie的基本概念及設置148
3.7.2PHP和JavaScript對Cookie的操作149
3.7.3Cookie存儲機制及應用151
3.7.4Cookie跨域與P3P、CORS協議153
3.7.5本地存儲localStorage156
3.8Session詳解158
3.8.1Session的基本概念及設置158
3.8.2Session的工作原理159
3.8.3Session入庫161
3.8.4集群環境下的Session處理165
3.8.5Cookie與Session問答166
3.9本章小結167
第4章RPC與服務治理的概念169
4.1理解RPC170
4.1.1RPC的原理171
4.1.2RPC素172
4.2HPROSE的介紹174
4.3何為服務治理176
4.4服務發現與服務注冊177
4.4.1Paxos協議178
4.4.2ZooKeeper的介紹與安裝179
4.4.3深入了解ZooKeeper180
4.4.4ZooKeeper的應用183
4.4.5etcd的介紹185
4.4.6在PHP中使用etcd參與服務治理187
4.5高性能網絡庫193
4.6微服務概念簡介194
4.7本章小結196
第5章PHP與數據庫基礎197
5.1什麼是PDO197
5.1.1PDO預定義類198
5.1.2如何使用PDO199
5.1.3PDO參數綁定與預編譯200
5.1.4PDO事務處理205
5.1.5PDO的效率問題206
5.2數據庫應用優化206
5.2.1索引與性能分析206
5.2.2服務器和配置的優化209
5.2.3MySQL瓶頸及應對措施211
5.3數據庫設計212
5.3.1範式與反範式212
5.3.2數據庫分區213
5.3.3分表的應用215
5.4MySQL的不錯應用217
5.4.1MySQL視圖217
5.4.2MySQL存儲過程和事件調度220
5.4.3用MySQL模擬消息隊列223
5.4.4SQL注入漏洞與防範226
5.4.5MySQL全文搜索與Elasticsearch231
5.5數據庫鎖與事務239
5.5.1數據庫鎖239
5.5.2數據庫事務246
5.5.3分布式事務254
5.6數據庫中間件257
5.6.1中間件的介紹257
5.6.2數據庫中間件的原理與實現257
5.7本章小結263
第6章PHP框架實現原理264
6.1MVC模式264
6.2PHP框架Lonicera 0.1265
6.2.1實現bootstrap267
6.2.2路由器層的實現269
6.2.3數據模型274
6.2.4視圖層實現282
6.2.5對框架的初步改進286
6.3Lonicera 0.2框架增強290
6.3.1引入異常機制290
6.3.2攔截器和插件的原理與實現293
6.3.3Request增強與安全防御296
6.4Lonicera框架0.3版實現297
6.4.1composer的介紹與安裝297
6.4.2composer的類加載機制301
6.4.3使用composer來重構框架303
6.4.4基於composer的Model增強307
6.4.5控制反轉與依賴注入309
6.5本章小結318
第7章PHP擴展開發319
7.1為什麼要開發PHP擴展319
7.2搭建PHP擴展框架319
7.2.1PHP源代碼目錄320
7.2.2ext_skel工具320
7.2.3Windows平臺環境配置320
7.2.4Linux平臺環境配置323
7.2.5PHP的生命周期325
7.3PHP內核中的變量327
7.3.1PHP變量在內核中的存儲方式327
7.3.2PHP內核變量訪問宏329
7.3.3引用計數器與寫時復制330
7.4PHP內核中的HashTable分析332
7.4.1PHP內核HashTable的數據結構332
7.4.2HashTable的代碼實現337
7.5Zend API詳解與擴展編寫341
7.5.1什麼是Zend引擎342
7.5.2Zend引擎內存管理342
7.5.3PHP擴展的架構342
7.5.4接收用戶傳遞的參數350
7.5.5在PHP擴展中創建變量357
7.5.6在PHP擴展中為變量賦值360
7.5.7錯誤和輸出API371
7.5.8運行時信息函數374
7.5.9調用用戶自定義函數374
7.5.10PHP配置項376
7.5.11創建常量的宏379
7.5.12對像創建與操作380
7.6唯一ID生成擴展實現383
7.6.1snowflake算法384
7.6.2自旋鎖原理385
7.6.3擴展的實現387
7.7本章小結389
第8章緩存詳解390
8.1認識緩存390
8.1.1為什麼使用緩存390
8.1.2命中率391
8.1.3緩存更新策略392
8.1.4緩存優選數據量394
8.2文件緩存394
8.2.1文件緩存機制394
8.2.2文件緩存開源產品Secache396
8.3Opcode緩存398
8.4客戶端緩存404
8.4.1客戶端緩存規則405
8.4.2HTTP協議中的緩存使用405
8.4.3HTTP緩存實例408
8.4.4HTML 5中的Application Cache410
8.5Web服務器緩存411
8.5.1Apache緩存412
8.5.2Nginx緩存412
8.6本章小結414
第9章Memcached使用與實踐415
9.1為什麼要用Memcached415
9.2Memcached的安裝及使用415
9.2.1安裝Memcached服務器416
9.2.2安裝Memcached客戶端417
9.2.3使用memcache擴展訪問Memcached服務器418
9.2.4使用Memcached加速Web應用421
9.3深入了解Memcached422
9.3.1Memcached如何支持高並發422
9.3.2使用Slab分配算法保存數據422
9.3.3刪除過期item426
9.3.4使用LRU算法淘汰數據427
9.3.5Memcached多線程模型428
9.4Memcached分布式布置方案431
9.4.1普通Hash分布431
9.4.2一致性Hash分布432
9.4.3一致性Hash分布算法實例434
9.5本章小結436
0章Redis使用與實踐437
10.1Redis的安裝及使用437
10.1.1Redis安裝步驟437
10.1.2修改Redis配置文件438
10.1.3運行Redis服務器439
10.1.4key相關命令439
10.1.5Redis支持的數據類型441
10.1.6Redis排序命令詳解447
10.2事務處理449
10.2.1事務處理原理449
10.2.2事務處理實現450
10.3持久化452
10.3.1內存快照452
10.3.2日志追加452
10.4主從同步453
10.4.1Redis主從同步原理453
10.4.2Slave端的工作流程454
10.4.3Master端的工作流程457
10.5Redis集群實戰462
10.5.1Redis集群搭建462
10.5.2Redis集群原理467
10.6擴展庫phpredis安裝及使用470
10.7Redis應用實踐470
10.7.1使用消息隊列發布微博471
10.7.2Redis替代文件存儲Session472
10.8深入了解Redis內核475
10.8.1內存淘汰475
10.8.2對像引用計數器477
10.8.3自動關閉超時連接479
10.8.4清除過期數據481
10.9本章小結482
1章高性能網站架構方案483
11.1如何優化網站響應時間483
11.1.1吞吐率484
11.1.2壓力測試485
11.1.3持久連接487
11.2MySQL響應速度提高方案:HandlerSocket491
11.2.1HandlerSocket工作原理491
11.2.2HandlerSocket安裝和配置491
11.2.3PHP-HandlerSocket性能測試493
11.3MySQL穩定性提高方案:主從復制494
11.3.1主從復制工作原理494
11.3.2主從復制配置495
11.3.3連接主從服務器497
11.4Web應用加速方案:Varnish499
11.4.1傳統代理與反向代理499
11.4.2Varnish安裝和配置500
11.4.3Varnish性能測試501
11.4.4修改緩存規則503
11.4.5監控Varnish運行狀態505
11.5異步計算方案:Gearman506
11.5.1Gearman工作原理506
11.5.2安裝Gearman和PHP擴展508
11.5.3使用Gearman異步發送郵件508
11.6本章小結510
2章代碼調試和測試511
12.1調試PHP代碼511
12.1.1PHP調試函數511
12.1.2斷點調試與變量跟蹤工具Xdebug515
12.1.3phpdbg的使用介紹518
12.1.4使用strace來跟蹤定位PHP程序520
12.2前端調試525
12.2.1Firebug調試API525
12.2.2使用Firebug調試DOM結構527
12.2.3使用Firebug進行遠程調試528
12.3日志管理530
12.3.1PHP日志531
12.3.2Apache/Nginx服務器日志531
12.3.3MySQL日志534
12.4代碼性能測試技術537
12.4.1時間點測試537
12.4.2文件查看工具WinCache-Grind538
12.4.3性能測試注意事項540
12測試541
12.5測試框架PHPUnit的安裝541
……
3章Hash算法與數據庫實現560
內容簡介
PHP領域認可的標杆之作,被譽為“PHP開發工程師能力進階的推薦閱讀書”,致力於為希望成為中不錯PHP程序員的讀者提供全面、高效的指導。本書版出版於2012年,累計印刷超過10次,6年後全新升級,一方面根據PHP技術新的發展刪除和更新了一些過時的內容,另一方面對原來的部分內容作了深度優化。全書共13章,邏輯上分為5個部分:靠前部分(1~2章):從不同的角度闡述了面向對像軟件設計思想的核心概念、技術和原則,分析了面向對像的特性、設計模式的理念,指出了如何設計低耦合、高可擴展性的軟件,等等。第二部分(3~6章):詳細講解了PHP網絡編程的原理、方法、技巧和一些重要的操作,PDO、數據庫應用優化,數據庫設計和MySQL的不錯應用,PHP框架的實現原理。第三部分(第7章):圍繞PHP擴展開發進行了細致而深入的探討,解析了PHP的底層實現和Zend虛擬機API,並用PHP擴展開發的實例帶領讀者走進P......