第一部分 介 紹
第1 章 PHP:設計與管理 2
1.1 問題 2
1.2 PHP 和其他語言 3
1.3 關於本書 5
1.3.1 對象 5
1.3.2 模式 5
1.3.3 實踐 6
1.3.4 第3 版新增內容 7
1.4 小結 7
第二部分 對 象
第2 章 PHP 與對象 10
2.1 PHP 對象的偶然成功 10
2.1.1 最初:PHP/FI 10
2.1.2 語法糖:PHP 3 10
2.1.3 一場靜悄悄的革命:PHP 4 11
2.1.4 擁抱改變:PHP 5 12
2.2 走嚮未來:PHP 6 13
2.3 擁護和疑慮:關於對象的爭辯 13
2.4 小結 14
第3 章 對象基礎 15
3.1 類和對象 15
3.1.1 編寫第一個類 15
3.1.2 第一個對象(或兩個) 16
3.2 設置類中的屬性 17
3.3 使用方法 19
3.4 參數和類型 21
3.4.1 基本類型 22
3.4.2 獲得提示:對象類型 24
3.5 繼承 26
3.5.1 繼承問題 26
3.5.2 使用繼承 30
3.5.3 public、private、protected:管理類的訪問 35
3.6 小結 39
第4 章 高級特性 40
4.1 靜態方法和屬性 40
4.2 常量屬性 43
4.3 抽象類 44
4.4 接口 46
4.5 延遲靜態綁定:static 關鍵字 47
4.6 錯誤處理 50
4.7 Final 類和方法 56
4.8 使用攔截器 57
4.9 析構方法 61
4.10 使用__clone()復製對象 62
4.11 定義對象的字符串值 64
4.12 迴調、匿名函數和閉包 65
4.13 小結 69
第5 章 對象工具 70
5.1 PHP 和包 70
5.1.1 PHP 包和命名空間 70
5.1.2 自動加載 78
5.2 類函數和對象函數 79
5.2.1 查找類 80
5.2.2 瞭解對象或類 81
5.2.3 瞭解類中的方法 82
5.2.4 瞭解類屬性 83
5.2.5 瞭解繼承 83
5.2.6 方法調用 84
5.3 反射API 85
5.3.1 入門 85
5.3.2 開始行動 86
5.3.3 檢查類 88
5.3.4 檢查方法 89
5.3.5 檢查方法參數 91
5.3.6 使用反射API 92
5.4 小結 95
第6 章 對象與設計 96
6.1 代碼設計的定義 96
6.2 麵嚮對象設計和過程式編程 97
6.2.1 職責 100
6.2.2 內聚 100
6.2.3 耦閤 101
6.2.4 正交 101
6.3 選擇類 101
6.4 多態 102
6.5 封裝 104
6.6 忘記細節 105
6.7 4 個方嚮標 105
6.7.1 代碼重復 106
6.7.2 類知道的太多 106
6.7.3 萬能的類 106
6.7.4 條件語句 106
6.8 UML 106
6.8.1 類圖 107
6.8.2 時序圖 111
6.9 小結 112
第三部分 模 式
第7 章 什麼是設計模式?為何使用它們 114
7.1 什麼是設計模式 114
7.2 設計模式概覽 116
7.2.1 命名 116
7.2.2 問題 116
7.2.3 解決方案 117
7.2.4 效果 117
7.3 《設計模式》格式 117
7.4 為什麼使用設計模式 118
7.4.1 一個設計模式定義瞭一個問題 118
7.4.2 一個設計模式定義瞭一個解決方案 118
7.4.3 設計模式是語言無關的 118
7.4.4 模式定義瞭一組詞匯 118
7.4.5 模式是經過測試的 119
7.4.6 模式是為協作而設計的 119
7.4.7 設計模式促進良好設計 119
7.5 PHP 與設計模式 120
7.6 小結 120
第8 章 模式原則 121
8.1 模式的啓示 121
8.2 組閤與繼承 122
8.2.1 問題 122
8.2.2 使用組閤 124
8.3 解耦 127
8.3.1 問題 127
8.3.2 降低耦閤 128
8.4 針對接口編程,而不是針對實現編程 130
8.5 變化的概念 131
8.6 父子關係 132
8.7 模式 132
8.7.1 用於生成對象的模式 133
8.7.2 用於組織對象和類的模式 133
8.7.3 麵嚮任務的模式 133
8.7.4 企業模式 133
8.7.5 數據庫模式 133
8.8 小結 133
第9 章 生成對象 134
9.1 生成對象的問題和解決方法 134
9.2 單例模式 138
9.2.1 問題 138
9.2.2 實現 139
9.2.3 結果 141
9.3 工廠方法模式 141
9.3.1 問題 141
9.3.2 實現 143
9.3.3 結果 145
9.4 抽象工廠模式 146
9.4.1 問題 146
9.4.2 實現 147
9.4.3 結果 148
9.4.4 原型模式 150
9.4.5 問題 150
9.4.6 實現 151
9.5 某些模式的騙術 153
9.6 小結 154
第10 章 讓麵嚮對象編程更加靈活的模式 155
10.1 構造可靈活創建對象的類 155
10.2 組閤模式 155
10.2.1 問題 156
10.2.2 實現 158
10.2.3 效果 161
10.2.4 組閤模式小結 164
10.3 裝飾模式 165
10.3.1 問題 165
10.3.2 實現 167
10.3.3 效果 170
10.4 外觀模式 170
10.4.1 問題 170
10.4.2 實現 172
10.4.3 效果 172
10.5 小結 173
第11 章 執行及描述任務 174
11.1 解釋器模式 174
11.1.1 問題 174
11.1.2 實現 175
11.1.3 解釋器的問題 182
11.2 策略模式 183
11.2.1 問題 183
11.2.2 實現 184
11.3 觀察者模式 187
11.4 訪問者模式 194
11.4.1 問題 194
11.4.2 實現 195
11.4.3 訪問者模式的問題 199
11.5 命令模式 200
11.5.1 問題 200
11.5.2 實現 200
11.6 小結 204
第12 章 企業模式 205
12.1 架構概述 205
12.1.1 模式 205
12.1.2 應用程序和層 206
12.2 企業架構之外的基礎模式 208
12.2.1 注冊錶 208
12.2.2 實現 209
12.3 錶現層 217
12.3.1 前端控製器 217
12.3.2 應用控製器 227
12.3.3 頁麵控製器 237
12.3.4 模闆視圖和視圖助手 242
12.4 業務邏輯層 245
12.4.1 事務腳本 245
12.4.2 領域模型 249
12.5 小結 252
第13 章 數據庫模式 253
13.1 數據層 253
13.2 數據映射器 253
13.2.1 問題 254
13.2.2 實現 254
13.2.3 效果 265
13.3 標識映射 266
13.3.1 問題 266
13.3.2 實現 266
13.3.3 效果 269
13.4 工作單元 269
13.4.1 問題 269
13.4.2 實現 270
13.4.3 效果 274
13.4.4 延遲加載 274
13.4.5 問題 274
13.4.6 實現 274
13.4.7 效果 276
13.5 領域對象工廠 276
13.5.1 問題 276
13.5.2 實現 277
13.5.3 效果 278
13.6 標識對象 279
13.6.1 問題 279
13.6.2 實現 280
13.6.3 效果 285
13.7 選擇工廠和更新工廠模式 285
13.7.1 問題 285
13.7.2 實現 285
13.7.3 效果 288
13.8 數據映射器中剩下些什麼 289
13.9 小結 291
第四部分 實 踐
第14 章 良好和糟糕的實踐 294
14.1 超越代碼 294
14.2 藉一個輪子 295
14.3 閤作愉快 296
14.4 為你的代碼插上雙翼 297
14.5 文檔 297
14.6 測試 298
14.7 持續集成 299
14.8 小結 300
第15 章 PEAR 和Pyrus 301
15.1 什麼是PEAR 301
15.2 瞭解Pyrus 302
15.3 安裝PEAR 包 303
15.4 使用PEAR 包 306
15.5 創建自己的PEAR 包 311
15.5.1 package.xml 311
15.5.2 package.xml 的組成 312
15.5.3 contents 元素 313
15.5.4 依賴 316
15.5.5 使用phprelease 進行靈活的自定義安裝 317
15.5.6 準備發布包 318
15.5.7 創建自己的PEAR 頻道 318
15.6 小結 323
第16 章 用phpDocumentor 生成文檔 324
16.1 為什麼要使用文檔 324
16.2 安裝 325
16.3 生成文檔 325
16.4 DocBlock 注釋 327
16.5 類的文檔 328
16.6 文件的文檔 330
16.7 屬性的文檔 330
16.8 方法的文檔 331
16.9 在文檔中創建鏈接 333
16.10 小結 335
第17 章 使用Subversion 進行版本控製 336
17.1 為什麼要使用版本控製 336
17.2 獲得Subversion 337
17.3 配置Subversion 代碼庫 338
17.4 開始項目 339
17.5 更新和提交 341
17.6 增加和刪除文件及目錄 344
17.6.1 添加文件 344
17.6.2 刪除文件 345
17.6.3 添加目錄 345
17.6.4 刪除目錄 345
17.7 標記和導齣項目 345
17.7.1 標記項目 345
17.7.2 導齣項目 346
17.8 創建項目分支 347
17.9 小結 350
第18 章 使用PHPUnit 進行測試 351
18.1 功能測試與單元測試 351
18.2 手工測試 352
18.3 引入PHPUnit 354
18.3.1 創建測試用例 354
18.3.2 斷言方法 355
18.3.3 測試異常 356
18.3.4 運行測試套件 357
18.3.5 約束 358
18.3.6 模擬與樁 360
18.3.7 失敗是成功之母 362
18.4 編寫Web 測試 365
18.4.1 為測試重構Web 應用 366
18.4.2 簡單的Web 測試 368
18.4.3 Selenium 370
18.5 警告 374
18.6 小結 376
第19 章 用Phing 實現項目的自動構建 377
19.1 什麼是Phing 377
19.2 獲取和安裝Phing 378
19.3 編寫build 文檔 378
19.3.1 目標 380
19.3.2 屬性 382
19.3.3 類型 387
19.3.4 任務 391
19.4 小結 394
第五部分 結 論
第20 章 持續集成 396
20.1 什麼是持續集成 396
20.2 CruiseControl 和phpUnderControl 404
20.2.1 安裝CruiseControl 404
20.2.2 安裝phpUnderControl 406
20.2.3 安裝項目 408
20.3 小結 418
第21 章 對象、模式與實踐 419
21.1 對象 419
21.1.1 選擇 420
21.1.2 封裝和委托 420
21.1.3 解耦 420
21.1.4 復用性 421
21.1.5 美學 421
21.2 模式 421
21.2.1 模式給我們帶來瞭什麼 422
21.2.2 模式和設計原則 422
21.3 實踐 424
21.3.1 測試 424
21.3.2 文檔 424
21.3.3 版本控製 425
21.3.4 自動構建 425
21.3.5 持續集成 425
21.3.6 我們還遺漏瞭什麼 425
21.4 小結 426
第六部分 附 錄
附錄A 參考文獻 428
附錄B 簡單的解析器 431
· · · · · · (
收起)