前言
第1章 麵嚮對象思想的核心概念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.1 set和get方法8
1.2.2 call和callStatic方法…11
1.2.3 toString方法和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.3 PHP中的錯誤級彆45
1.7.4 PHP中的錯誤處理機製47
1.7.5 PHP7對異常機製的改進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.1 HTTP協議詳解79
3.1.1 HTTP協議與HTTP/2協議…79
3.1.2 HTTP協議如何工作81
3.1.3 HTTP應用:模擬灌水機器人86
3.1.4 垃圾信息防禦措施92
3.2 抓包工具96
3.2.1 抓包工具分類96
3.2.2 Fiddler功能與原理96
3.2.3 安裝Fiddler97
3.2.4 Fiddler基本界麵98
3.2.5 使用Fiddler進行HTTP斷點調試101
3.3 Socket進程通信機製及應用104
3.3.1 進程通信相關概念104
3.3.2 Socket演示:實現服務器端與客戶端的交互105
3.3.3 使用wireshar分析TCP/IP數據包108
3.3.4 Socket函數原型114
3.3.5 PHP中的Socket函數114
3.3.6 Socket交互應用:使用Socket抓取數據117
3.4 cURL工具及應用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.6 cURL批處理129
3.4.7 cURL設置項130
3.5 簡單郵件傳輸協議SMTP131
3.5.1 SMTP協議如何工作132
3.5.2 SMTP協議常用命令133
3.5.3 SMTP協議應用:使用Socket發送郵件133
3.6 WebService的前世今生138
3.6.1 WebService簡介138
3.6.2 Web服務的實現模式138
3.6.3 簡單對象訪問協議SOAP…140
3.6.4 調試工具soapUI145
3.7 Cookie詳解148
3.7.1 Cookie的基本概念及設置…148
3.7.2 PHP和JavaScript對Cookie的操作149
3.7.3 Cookie存儲機製及應用151
3.7.4 Cookie跨域與P3P、CORS協議153
3.7.5 本地存儲localStorage156
3.8 Session詳解158
3.8.1 Session的基本概念及設置158
3.8.2 Session的工作原理159
3.8.3 Session入庫161
3.8.4 集群環境下的Session處理165
3.8.5 Cookie與Session問答166
3.9 本章小結167
第4章 RPC與服務治理的概念169
4.1 理解RPC170
4.1.1 RPC的原理171
4.1.2 RPC的組成元素172
4.2 HPROSE的介紹174
4.3 何為服務治理176
4.4 服務發現與服務注冊177
4.4.1 Paxos協議178
4.4.2 ZooKeeper的介紹與安裝…179
4.4.3 深入瞭解ZooKeeper180
4.4.4 ZooKeeper的應用183
4.4.5 etcd的介紹185
4.4.6 在PHP中使用etcd參與服務治理187
4.5 高性能網絡庫193
4.6 微服務概念簡介194
4.7 本章小結196
第5章 PHP與數據庫基礎197
5.1 什麼是PDO197
5.1.1 PDO預定義類198
5.1.2 如何使用PDO199
5.1.3 PDO參數綁定與預編譯200
5.1.4 PDO事務處理205
5.1.5 PDO的效率問題206
5.2 數據庫應用優化206
5.2.1 索引與性能分析206
5.2.2 服務器和配置的優化209
5.2.3 MySQL瓶頸及應對措施211
5.3 數據庫設計212
5.3.1 範式與反範式212
5.3.2 數據庫分區213
5.3.3 分錶的應用215
5.4 MySQL的高級應用217
5.4.1 MySQL視圖217
5.4.2 MySQL存儲過程和事件調度220
5.4.3 用MySQL模擬消息隊列223
5.4.4 SQL注入漏洞與防範226
5.4.5 MySQL全文搜索與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.1 MVC模式264
6.2 PHP框架Lonicera 0.1265
6.2.1 實現bootstrap267
6.2.2 路由器層的實現269
6.2.3 數據模型274
6.2.4 視圖層實現282
6.2.5 對框架的初步改進286
6.3 Lonicera 0.2框架增強290
6.3.1 引入異常機製290
6.3.2 攔截器和插件的原理與實現293
6.3.3 Request增強與安全防禦296
6.4 Lonicera框架0.3版實現297
6.4.1 composer的介紹與安裝297
6.4.2 composer的類加載機製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.1 PHP源代碼目錄320
7.2.2 ext_skel工具320
7.2.3 Windows平颱環境配置320
7.2.4 Linux平颱環境配置323
7.2.5 PHP的生命周期325
7.3 PHP內核中的變量327
7.3.1 PHP變量在內核中的存儲方式327
7.3.2 PHP內核變量訪問宏329
7.3.3 引用計數器與寫時復製330
7.4 PHP內核中的HashTable分析…332
7.4.1 PHP內核HashTable的數據結構332
7.4.2 HashTable的代碼實現337
7.5 Zend API詳解與擴展編寫341
7.5.1 什麼是Zend引擎342
7.5.2 Zend引擎內存管理342
7.5.3 PHP擴展的架構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.10 PHP配置項376
7.5.11 創建常量的宏379
7.5.12 對象創建與操作380
7.6 唯一ID生成擴展實現383
7.6.1 snowflake算法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.3 Opcode緩存398
8.4 客戶端緩存404
8.4.1 客戶端緩存規則405
8.4.2 HTTP協議中的緩存使用…405
8.4.3 HTTP緩存實例408
8.4.4 HTML 5中的Application Cache410
8.5 Web服務器緩存411
8.5.1 Apache緩存412
8.5.2 Nginx緩存412
8.6 本章小結414
第9章 Memcached使用與實踐415
9.1 為什麼要用Memcached415
9.2 Memcached的安裝及使用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.1 Memcached如何支持高並發422
9.3.2 使用Slab分配算法保存數據422
9.3.3 刪除過期item426
9.3.4 使用LRU算法淘汰數據427
9.3.5 Memcached多綫程模型428
9.4 Memcached分布式布置方案431
9.4.1 普通Hash分布431
9.4.2 一緻性Hash分布432
9.4.3 一緻性Hash分布算法實例434
9.5 本章小結436
第10章 Redis使用與實踐437
10.1 Redis的安裝及使用437
10.1.1 Redis安裝步驟437
10.1.2 修改Redis配置文件438
10.1.3 運行Redis服務器439
10.1.4 key相關命令439
10.1.5 Redis支持的數據類型…441
10.1.6 Redis排序命令詳解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.1 Redis主從同步原理453
10.4.2 Slave端的工作流程454
10.4.3 Master端的工作流程457
10.5 Redis集群實戰462
10.5.1 Redis集群搭建462
10.5.2 Redis集群原理467
10.6 擴展庫phpredis安裝及使用470
10.7 Redis應用實踐470
10.7.1 使用消息隊列發布微博…471
10.7.2 Redis替代文件存儲Session472
10.8 深入瞭解Redis內核475
10.8.1 內存淘汰475
10.8.2 對象引用計數器477
10.8.3 自動關閉超時連接479
10.8.4 清除過期數據481
10.9 本章小結482
第11章 高性能網站架構方案483
11.1 如何優化網站響應時間483
11.1.1 吞吐率484
11.1.2 壓力測試485
11.1.3 持久連接487
11.2 MySQL響應速度提高方案:HandlerSocket491
11.2.1 HandlerSocket工作原理491
11.2.2 HandlerSocket安裝和配置491
11.2.3 PHP-HandlerSocket性能測試493
11.3 MySQL穩定性提高方案:主從復製494
11.3.1 主從復製工作原理494
11.3.2 主從復製配置495
11.3.3 連接主從服務器497
11.4 Web應用加速方案:Varnish…499
11.4.1 傳統代理與反嚮代理499
11.4.2 Varnish安裝和配置500
11.4.3 Varnish性能測試501
11.4.4 修改緩存規則503
11.4.5 監控Varnish運行狀態…505
11.5 異步計算方案:Gearman506
11.5.1 Gearman工作原理506
11.5.2 安裝Gearman和PHP擴展508
11.5.3 使用Gearman異步發送郵件508
11.6 本章小結510
第12章 代碼調試和測試511
12.1 調試PHP代碼511
12.1.1 PHP調試函數511
12.1.2 斷點調試與變量跟蹤工具Xdebug515
12.1.3 phpdbg的使用介紹518
12.1.4 使用strace來跟蹤定位PHP程序520
12.2 前端調試525
12.2.1 Firebug調試API525
12.2.2 使用Firebug調試DOM結構527
12.2.3 使用Firebug進行遠程調試528
12.3 日誌管理530
12.3.1 PHP日誌531
12.3.2 Apache/Nginx服務器日誌531
12.3.3 MySQL日誌534
12.4 代碼性能測試技術537
12.4.1 時間點測試537
12.4.2 文件查看工具WinCache-Grind538
12.4.3 性能測試注意事項540
12.5 單元測試541
12.5.1 單元測試框架PHPUnit的安裝541
12.5.2 初步使用PHPUnit進行單元測試542
12.5.3 PHPUnit中的斷言函數…544
12.5.4 PHPUnit常用模闆方法…548
12.5.5 PHPUnit常用注解549
12.6 壓力測試551
12.6.1 使用JMeter壓力測試HTTP551
12.6.2 壓力測試MySQL554
12.6.3 JMeter+Badboy組閤測試557
12.7 本章小結559
第13章 Hash算法與數據庫實現…560
13.1 Hash函數560
13.2 Hash算法560
13.2.1 直接取餘法560
13.2.2 乘積取整法561
13.2.3 經典Hash算法Times33…561
13.3 Hash錶561
13.3.1 Hash錶結構562
13.3.2 使用PHP實現Hash錶…562
13.3.3 Hash錶衝突564
13.3.4 拉鏈法解決衝突564
13.4 一個小型數據庫的實現567
13.4.1 pack函數的用法567
13.4.2 unpack函數的用法569
13.4.3 索引文件和數據文件570
13.4.4 數據庫接口方法571
13.4.5 源代碼解析572
13.4.6 測試代碼580
13.5 本章小結581
· · · · · · (
收起)