本書是PHP 專家經典力作的最新版本。
書中主要介紹了如何使用面向對象技術和設計模式編寫穩定的、可維護的代碼,如何使用強大的phpDocumentor 自動文檔系統創建詳細的多功能文檔,如何通過管理CVS 中的代碼和使用Phing 構建系統在開發過程中得到更好的靈活性,以及如何使用PEAR 包管理解決方案。
本書適合中高級PHP 程式設計師閱讀。
基本介紹
- 書名:深入PHP : 面向對象、模式與實踐(第2版)
- 作者:Matt Zandstra
- 原版名稱:PHP Objects, Patterns, and Practice, Second Edition
- 譯者:陳浩,吳孫濱,胡丹
- ISBN:978-7-115-22578-8
- 類別:PHP
- 頁數:383
- 定價:59.00
- 出版社:人民郵電出版社
- 出版時間:2010 年5月
- 開本:16開
- 叢書名:圖靈程式設計叢書
內容簡介,作者,目錄,
內容簡介
本書全面深入地剖析了面向對象的php編程與設計。首先介紹了php的oo特性,包括類聲明、對象實例化、繼承、方法與屬性封裝以及靜態方法與屬性、抽象類、接口、異常處理、對象克隆等高級主題。然後介紹了設計模式,闡述了模式的概念,展示了如何在php中實現幾個關鍵的模式,用專門的章節介紹了企業模式和資料庫模式。本書最後一部分圍繞php應用程式開發,詳細介紹了一批極為實用的輔助開發工具,討論了具有普遍意義的最佳開發實踐。
本書適合每位php程式設計師進階參考,幫助他們掌握php面向對象設計和開發的精髓,躋身高端php程式設計師之列。
作者
Matt Zandstra Yahoo公司的高級程式設計師,曾從事過教師等工作,著有Sams Teach Yourself PHP in 24 Hours等書,還為Linux Magazine、IBM DeveloperWorks、Zend和bdz-consult寫過PHP方面的文章。
目錄
第一部分 介紹
第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 本書第2版中的新內容 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 12
2.3 擁護和疑慮:關於對象的爭辯 13
2.4 小結 13
.第3章 對象基礎 14
3.1 類和對象 14
3.1.1 編寫第一個類 14
3.1.2 第一個對象(或兩個) 15
3.2 設定類中的屬性 15
3.3 使用方法 18
3.4 參數和類型 20
3.4.1 基本類型 20
3.4.2 獲得提示:對象類型 23
3.5 繼承 24
3.5.1 繼承問題 24
3.5.2 使用繼承 28
3.5.3 public、private、protected:管理類的訪問 32
3.6 小結 35
第4章 高級特性 36
4.1 靜態方法和屬性 36
4.2 常量屬性 39
4.3 抽象類 39
4.4 接口 41
4.5 錯誤處理 43
4.6 final類和方法 48
4.7 使用攔截器 49
4.8 析構方法 53
4.9 使用__clone()複製對象 54
4.10 定義對象的字元串值 56
4.11 小結 57
第5章 對象工具 58
5.1 php和包 58
5.1.1 php和命名空間 60
5.1.2 包含路徑 62
5.1.3 自動載入 63
5.2 類函式和對象函式 64
5.2.1 查找類 64
5.2.2 了解對象或類 65
5.2.3 了解類中的方法 66
5.2.4 了解類屬性 67
5.2.5 了解繼承 67
5.2.6 方法調用 68
5.3 反射api 69
5.3.1 入門 69
5.3.2 開始行動 69
5.3.3 檢查類 71
5.3.4 檢查方法 72
5.3.5 檢查方法參數 74
5.3.6 使用反射api 75
5.4 小結 78
第6章 對象與設計 79
6.1 代碼設計的定義 79
6.2 面向對象設計和過程式編程 80
6.2.1 職責 83
6.2.2 內聚 83
6.2.3 耦合 83
6.2.4 正交 84
6.3 選擇類 84
6.4 多態 85
6.5 封裝 86
6.6 忘記細節 87
6.7 四個方向標 88
6.7.1 代碼重複 88
6.7.2 類知道的太多 88
6.7.3 萬能的類 88
6.7.4 條件語句 89
6.8 uml 89
6.8.1 類圖 89
6.8.2 時序圖 94
6.9 小結 95
第三部分 模式
第7章 什麼是設計模式?為何使用它們 98
7.1 什麼是設計模式 98
7.2 設計模式概覽 100
7.2.1 命名 100
7.2.2 問題 100
7.2.3 解決方案 101
7.2.4 效果 101
7.3 《設計模式》格式 101
7.4 為什麼使用設計模式 102
7.4.1 一個設計模式定義了一個問題 102
7.4.2 一個設計模式定義了一個解決方案 102
7.4.3 設計模式是語言無關的 102
7.4.4 模式定義了一組辭彙 102
7.4.5 模式是經過測試的 103
7.4.6 模式是為協作而設計的 103
7.4.7 設計模式促進良好設計 103
7.5 php與設計模式 103
7.6 小結 104
第8章 模式原則 105
8.1 模式的啟示 105
8.2 組合與繼承 106
8.2.1 問題 106
8.2.2 使用組合 108
8.3 解耦 110
8.3.1 問題 110
8.3.2 降低耦合 111
8.4 針對接口編程,而不是針對實現編程 112
8.5 變化的概念 113
8.6 父子關係 113
8.7 模式 114
8.7.1 用於生成對象的模式 114
8.7.2 用於組織對象和類的模式 114
8.7.3 面向任務的模式 114
8.7.4 企業模式 114
8.7.5 資料庫模式 114
8.8 小結 115
第9章 生成對象 116
9.1 生成對象的問題和解決方法 116
9.2 單例模式 119
9.2.1 問題 120
9.2.2 實現 120
9.2.3 結果 122
9.3 工廠方法模式 122
9.3.1 問題 122
9.3.2 實現 125
9.3.3 結果 126
9.4 抽象工廠模式 127
9.4.1 問題 127
9.4.2 實現 128
9.4.3 結果 129
9.4.4 原型模式 131
9.4.5 問題 132
9.4.6 實現 133
9.5 某些模式的騙術 134
9.6 小結 136
第10章 讓面向對象編程更加靈活的模式 137
10.1 構造可靈活創建對象的類 137
10.2 組合模式 137
10.2.1 問題 138
10.2.2 實現 139
10.2.3 效果 143
10.2.4 組合模式小結 146
10.3 裝飾模式 146
10.3.1 問題 146
10.3.2 實現 148
10.3.3 效果 151
10.4 外觀模式 151
10.4.1 問題 152
10.4.2 實現 153
10.4.3 效果 153
10.5 小結 154
第11章 執行及描述任務 155
11.1 解釋器模式 155
11.1.1 問題 155
11.1.2 實現 156
11.1.3 解釋器的問題 162
11.2 策略模式 163
11.2.1 問題 163
11.2.2 實現 164
11.3 觀察者模式 167
11.4 訪問者模式 173
11.4.1 問題 174
11.4.2 實現 175
11.4.3 訪問者模式的問題 178
11.5 命令模式 179
11.5.1 問題 179
11.5.2 實現 179
11.6 小結 183
第12章 企業模式 184
12.1 架構概述 184
12.1.1 模式 184
12.1.2 應用程式和層 185
12.2 企業架構之外的基礎模式 187
12.2.1 註冊表 187
12.2.2 實現 188
12.3 表現層 196
12.3.1 前端控制器 196
12.3.2 套用控制器 205
12.3.3 頁面控制器 214
12.3.4 模板視圖和視圖助手 218
12.4 業務邏輯層 220
12.4.1 事務腳本 221
12.4.2 領域模型 225
12.5 小結 227
第13章 資料庫模式 228
13.1 數據層 228
13.2 數據映射器 228
13.2.1 問題 229
13.2.2 實現 229
13.2.3 效果 239
13.3 標識映射 239
13.3.1 問題 240
13.3.2 實現 240
13.3.3 效果 242
13.4 工作單元 243
13.4.1 問題 243
13.4.2 實現 243
13.4.3 效果 246
13.4.4 延遲載入 247
13.4.5 問題 247
13.4.6 實現 247
13.4.7 效果 249
13.5 領域對象工廠 249
13.5.1 問題 249
13.5.2 實現 249
13.5.3 效果 250
13.6 標識對象 252
13.6.1 問題 252
13.6.2 實現 252
13.6.3 效果 256
13.7 選擇工廠和更新工廠模式 257
13.7.1 問題 257
13.7.2 實現 257
13.7.3 效果 259
13.8 數據映射器中剩下些什麼 260
13.9 小結 262
第四部分 實踐
第14章 良好和糟糕的實踐 264
14.1 超越代碼 264
14.2 借一個輪子 264
14.3 合作愉快 266
14.4 為你的代碼插上雙翼 267
14.5 文檔 267
14.6 測試 268
14.7 小結 269
第15章 pear 270
15.1 什麼是pear 270
15.2 安裝pear包 271
15.3 使用pear包 273
15.4 創建自己的pear包 278
15.4.1 package.xml 278
15.4.2 package.xml的組成元素 278
15.4.3 contents元素 279
15.4.4 依賴 282
15.4.5 使用phprelease進行靈活的自定義安裝 283
15.4.6 發布包 284
15.4.7 創建自己的pear頻道 284
15.5 小結 288
第16章 用phpdocumentor生成文檔 289
16.1 為什麼要使用文檔 289
16.2 安裝 290
16.3 生成文檔 290
16.4 docblock注釋 292
16.5 類的文檔 293
16.6 檔案的文檔 294
16.7 屬性的文檔 295
16.8 方法的文檔 296
16.9 在文檔中創建連結 297
16.10 小結 300
第17章 使用cvs進行版本控制 301
17.1 為什麼要使用版本控制 301
17.2 獲得cvs 302
17.3 配置cvs代碼庫 303
17.3.1 創建代碼庫 303
17.3.2 配置客戶端 304
17.3.3 在多台機器上運行cvs 304
17.4 開始項目 305
17.5 更新和提交 307
17.6 增加和刪除檔案及目錄 309
17.6.1 添加檔案 309
17.6.2 刪除檔案 310
17.6.3 添加目錄 310
17.6.4 添加二進制檔案 311
17.6.5 刪除目錄 311
17.7 標記和導出項目 312
17.7.1 標記項目 313
17.7.2 通過標籤獲取項目代碼 313
17.7.3 導出項目 314
17.8 創建項目分支 314
17.9 小結 317
第18章 使用phpunit進行測試 318
18.1 功能測試與單元測試 318
18.2 手工測試 319
18.3 引入phpunit 321
18.3.1 創建測試用例 321
18.3.2 斷言方法 322
18.3.3 測試異常 323
18.3.4 運行測試套件 324
18.3.5 約束 326
18.3.6 模擬與樁 328
18.3.7 失敗是成功之母 331
18.4 警告 333
18.5 小結 335
第19章 用phing實現項目的自動
構建 336
19.1 什麼是phing 336
19.2 獲取和安裝phing 337
19.3 編寫build文檔 337
19.3.1 目標 339
19.3.2 屬性 340
19.3.3 類型 345
19.3.4 任務 348
19.4 小結 352
第五部分 結論
第20章 對象、模式與實踐 354
20.1 對象 354
20.1.1 選擇 355
20.1.2 封裝和委託 355
20.1.3 解耦 355
20.1.4 復用性 356
20.1.5 美學 356
20.2 模式 356
20.2.1 模式給我們帶來了什麼 357
20.2.2 模式和設計原則 357
20.3 實踐 359
20.3.1 測試 359
20.3.2 文檔 359
20.3.3 版本控制 360
20.3.4 自動構建 360
20.3.5 我們還遺漏了什麼 360
20.4 小結 361
第六部分 附錄
附錄a 參考文獻 364
附錄b 簡單的解析器 366