《PHP精粹》是2012年出版的科技類圖書,作者是Lorna Mitchell / Davey Shafik / Matthew Turland。
基本介紹
- 書名:PHP精粹
- 作者:Lorna Mitchell /
- 譯者:彭沖 / 胡琳
- ISBN:9787111399070
- 頁數:238
- 定價:59.00元
- 出版時間:2012-11-1
- 副標題:編寫高效PHP代碼
- 叢書: 華章程式設計師書庫
- 類別:it技術類
內容介紹,作者介紹,作品目錄,
內容介紹
本書是資深PHP技術專家多年工作經驗的結晶,從資料庫、API、設計模式、安全性、應用程式性能、自動化測試、質量保證等核心方面總結了編寫高效PHP代碼的技巧和最佳實踐,旨在讓有一定基礎的PHP開發者在進階修煉的路上儘可能少走彎路!全書包含大量精心設計的示例,不僅能幫助讀者理解具體的技術知識,而且能讓讀者學到作者解決各種問題的思路,授人以魚同時授人以漁。
本書共8章,每章一個主題:第1章重新闡述了面向對象編程中的核心概念和技術,目的是確保基礎知識匱乏的開發者能正確理解它們;第2章總結了PHP開發中與資料庫相關的各種最佳實踐,如數據持久化、數據存儲、MySQL使用方法、PDO,以及資料庫的設計等;第3章詳細講解了API及其使用方式;第4章總結了PHP開發中常用的各種設計模式及其使用原則;第5章講解了如何編寫安全的PHP代碼,對PHP開發中各種常見的安全問題進行了總結和分析;第6章從基準測試、系統測試、資料庫、檔案系統等方面探討了PHP應用程式的性能問題;第7章講解了PHP的自動化測試,包含單元測試、資料庫測試、負載均衡測試等;第8章總結了PHP開發中與質量保證相關的最佳實踐,包括質量測量、編碼標準、原始碼管理、自動部署等。除此之外,本書還對PEAR、PECL,以及PHP標準庫進行了講解。
作者介紹
Lorna Mitchell,資深PHP技術專家,常駐英國利茲的PHP顧問,從事軟體開發相關工作多年,尤其擅長與數據和API相關的知識。活躍於PHP社區,是美國西北部PHP技術社群的組織者,曾組織過多次社團會議並發表演講,是開源項目Joind.in的領導者。她還是一位技術作家,熱衷於分享自己的經驗,經常在多種流行雜誌和網站上發表技術文章。
Davey Shafik,資深LAMP技術專家,精通PHP,在HTML、CSS、JavaScript等Web相關技術領域也積累了十分豐富的經驗。他還是一位經驗豐富的技術作家,不僅發表了大量的技術文章,而且著有《The PHP Anthology: 101 Essential Tips, Tricks & Hacks》和《PHP Architect’s Zend PHP 5 Certification Study Guide》等著作。
Matthew Turland,資深PHP技術專家,有近10年PHP開發經驗,是PHP 5和Zend Framework的Zend認證工程師。他是Zend Framework、 PHPUnit和Phergie等PHP開源項目的參與者,為這些項目撰寫了大量文章。他還是一位經驗豐富的技術作家,不僅撰寫了《PHP Architect’s Guide to Web Scraping with PHP》等著作,而且還在《PHP Architect》等雜誌上發表了大量文章。
作品目錄
譯者序
前 言
第1章 面向對象編程1
1.1 為什麼要使用面向對象編程1
1.2 OOP簡介1
1.2.1 聲明類1
1.2.2 類的構造2
1.2.3 對象實例化3
1.2.4 自動載入3
1.2.5 使用對象4
1.2.6 使用靜態屬性和方法4
1.2.7 對象和命名空間5
1.3 對象的繼承7
1.4 對象和函式9
1.4.1 類型提示9
1.4.2 多態性9
1.4.3 對象和引用10
1.4.4 作為函式參數傳遞的對象11
1.4.5 流暢的接口12
1.5 public、private以及protected12
1.5.1 public13
1.5.2 private13
1.5.3 protected13
1.5.4 選擇正確的可見性14
1.5.5 使用getter和setter來控制可見性14
1.5.6 使用神奇的_get和_set方法15
1.6 接口16
1.6.1 SPL Countable接口示例16
1.6.2 計數對象16
1.6.3 聲明和使用接口17
1.6.4 識別對象和接口17
1.7 異常18
1.7.1 處理異常18
1.7.2 為什麼要處理異常19
1.7.3 拋出異常19
1.7.4 擴展異常19
1.7.5 捕捉特定類型的異常20
1.7.6 設定一個全局異常處理程式21
1.7.7 使用回調22
1.8 更多神奇的方法22
1.8.1 使用__call()和__callStatic()方法22
1.8.2 使用__toString()方法輸出對象23
1.8.3 序列化對象24
1.9 本章小結25
第2章 資料庫26
2.1 數據持久化和Web應用程式26
2.2 選擇如何存儲數據26
2.3 用MySQL建立一個食譜網站27
2.4 PHP資料庫對象29
2.4.1 使用PDO連線到MySQL29
2.4.2 從表中選擇數據30
2.4.3 數據提取模式30
2.4.4 參數和預處理語句31
2.4.5 綁定值和預處理語句的變數32
2.4.6 插入一行並獲取ID34
2.4.7 有多少行被插入、更新或刪除34
2.4.8 刪除數據35
2.5 處理PDO中的錯誤35
2.5.1 處理預處理時的問題36
2.5.2 處理執行時的問題36
2.5.3 處理提取數據時的問題37
2.6 高級PDO特徵37
2.6.1 事務和PDO38
2.6.2 存儲過程和PDO39
2.7 設計資料庫39
2.7.1 主鍵與索引40
2.7.2 MySQL解析40
2.7.3 內部連線43
2.7.4 外部連線43
2.7.5 聚合函式和Group By44
2.7.6 規格化數據46
2.8 資料庫—排序46
第3章 API47
3.1 開始之前47
3.1.1 使用API工具47
3.1.2 添加API到你的系統47
3.2 面向服務的架構47
3.3 數據格式48
3.3.1 使用JSON49
3.3.2 使用XML50
3.4 HTTP:超文本傳輸協定53
3.4.1 HTTP信封53
3.4.2 傳送HTTP請求54
3.4.3 HTTP狀態碼57
3.4.4 HTTP檔案頭58
3.4.5 HTTP動詞61
3.5 理解並選擇服務類型61
3.5.1 PHP和SOAP62
3.5.2 使用WSDL描述SOAP服務63
3.6 調試HTTP65
3.6.1 使用日誌收集信息65
3.6.2 檢查HTTP流量65
3.7 RPC服務66
3.7.1 使用一個RPC服務:Flickr示例66
3.7.2 建立一個RPC服務68
3.8 Ajax和Web服務69
3.9 開發和使用RESTful服務75
3.9.1 超越Pretty URL75
3.9.2 RESTful原則76
3.9.3 建立一個RESTful服務76
3.10 設計一個Web服務82
3.11 提供的服務83
第4章 設計模式84
4.1 什麼是設計模式84
4.1.1 選擇一個最合適的84
4.1.2 單例模式84
4.1.3 Traits86
4.1.4 註冊表模式87
4.1.5 工廠模式90
4.1.6 疊代模式91
4.1.7 觀察者模式98
4.1.8 依賴注入101
4.1.9 模型–視圖–控制器104
4.2 模式的形成114
第5章 安全性115
5.1 是否有些偏執115
5.2 過濾輸入、避免輸出116
5.3 跨站腳本117
5.3.1 攻擊117
5.3.2 修復118
5.3.3 線上資源119
5.4 偽造跨站請求119
5.4.1 攻擊119
5.4.2 修復120
5.4.3 線上資源121
5.5 會話固定122
5.5.1 攻擊122
5.5.2 修復122
5.5.3 線上資源123
5.6 會話劫持123
5.6.1 攻擊123
5.6.2 修復124
5.6.3 線上資源125
5.7 SQL注入125
5.7.1 攻擊125
5.7.2 修復126
5.7.3 線上資源127
5.8 儲存密碼127
5.8.1 攻擊127
5.8.2 修復127
5.8.3 線上資源128
5.9 暴力破解攻擊129
5.9.1 攻擊129
5.9.2 修復130
5.9.3 線上資源131
5.10 SSL131
5.10.1 攻擊131
5.10.2 修復132
5.10.3 線上資源132
5.11 資源132
第6章 性能134
6.1 基準測試134
6.2 系統測試139
6.2.1 代碼快取139
6.2.2 INI設定143
6.3 資料庫144
6.4 檔案系統144
6.5 程式概要分析151
6.5.1 安裝XHProf152
6.5.2 安裝XHGui155
6.6 本章小結161
第7章 自動測試163
7.1 單元測試163
7.1.1 安裝PHPUnit163
7.1.2 編寫測試用例163
7.1.3 運行測試165
7.1.4 測試替身167
7.1.5 編寫可測試的代碼170
7.1.6 測試視圖和控制器173
7.2 資料庫測試177
7.2.1 資料庫測試用例177
7.2.2 連線178
7.2.3 數據集178
7.2.4 斷言180
7.3 系統測試181
7.3.1 初始設定181
7.3.2 命令182
7.3.3 定位器183
7.3.4 斷言184
7.3.5 資料庫集成184
7.3.6 調試186
7.3.7 自動編寫測試187
7.4 負載測試187
7.4.1 ab187
7.4.2 Siege188
7.5 本章小結189
第8章 質量保證190
8.1 使用靜態分析工具測量質量190
8.1.1 phploc190
8.1.2 phpcpd191
8.1.3 phpmd192
8.2 編碼標準193
8.2.1 使用PHP代碼探測器檢查編碼標準193
8.2.2 查看違反編碼標準的地方195
8.2.3 PHP代碼探測器標準196
8.3 文檔和代碼196
8.3.1 使用phpDocumentor197
8.3.2 其他文檔工具199
8.4 原始碼管理199
8.4.1 使用集中式版本控制200
8.4.2 為了原始碼管理使用版本控制201
8.4.3 設計版本庫的結構202
8.4.4 分散式的版本控制204
8.4.5 代碼的社會性工具205
8.4.6 使用Git進行原始碼控制206
8.4.7 將版本庫作為構建過程的根207
8.5 自動部署207
8.5.1 立刻切換到一個新版本208
8.5.2 管理資料庫變更208
8.5.3 自動部署和Phing209
8.6 準備部署211
附錄A PEAR和PECL212
附錄B PHP標準庫229
附錄C 進一步參考信息236
前 言
第1章 面向對象編程1
1.1 為什麼要使用面向對象編程1
1.2 OOP簡介1
1.2.1 聲明類1
1.2.2 類的構造2
1.2.3 對象實例化3
1.2.4 自動載入3
1.2.5 使用對象4
1.2.6 使用靜態屬性和方法4
1.2.7 對象和命名空間5
1.3 對象的繼承7
1.4 對象和函式9
1.4.1 類型提示9
1.4.2 多態性9
1.4.3 對象和引用10
1.4.4 作為函式參數傳遞的對象11
1.4.5 流暢的接口12
1.5 public、private以及protected12
1.5.1 public13
1.5.2 private13
1.5.3 protected13
1.5.4 選擇正確的可見性14
1.5.5 使用getter和setter來控制可見性14
1.5.6 使用神奇的_get和_set方法15
1.6 接口16
1.6.1 SPL Countable接口示例16
1.6.2 計數對象16
1.6.3 聲明和使用接口17
1.6.4 識別對象和接口17
1.7 異常18
1.7.1 處理異常18
1.7.2 為什麼要處理異常19
1.7.3 拋出異常19
1.7.4 擴展異常19
1.7.5 捕捉特定類型的異常20
1.7.6 設定一個全局異常處理程式21
1.7.7 使用回調22
1.8 更多神奇的方法22
1.8.1 使用__call()和__callStatic()方法22
1.8.2 使用__toString()方法輸出對象23
1.8.3 序列化對象24
1.9 本章小結25
第2章 資料庫26
2.1 數據持久化和Web應用程式26
2.2 選擇如何存儲數據26
2.3 用MySQL建立一個食譜網站27
2.4 PHP資料庫對象29
2.4.1 使用PDO連線到MySQL29
2.4.2 從表中選擇數據30
2.4.3 數據提取模式30
2.4.4 參數和預處理語句31
2.4.5 綁定值和預處理語句的變數32
2.4.6 插入一行並獲取ID34
2.4.7 有多少行被插入、更新或刪除34
2.4.8 刪除數據35
2.5 處理PDO中的錯誤35
2.5.1 處理預處理時的問題36
2.5.2 處理執行時的問題36
2.5.3 處理提取數據時的問題37
2.6 高級PDO特徵37
2.6.1 事務和PDO38
2.6.2 存儲過程和PDO39
2.7 設計資料庫39
2.7.1 主鍵與索引40
2.7.2 MySQL解析40
2.7.3 內部連線43
2.7.4 外部連線43
2.7.5 聚合函式和Group By44
2.7.6 規格化數據46
2.8 資料庫—排序46
第3章 API47
3.1 開始之前47
3.1.1 使用API工具47
3.1.2 添加API到你的系統47
3.2 面向服務的架構47
3.3 數據格式48
3.3.1 使用JSON49
3.3.2 使用XML50
3.4 HTTP:超文本傳輸協定53
3.4.1 HTTP信封53
3.4.2 傳送HTTP請求54
3.4.3 HTTP狀態碼57
3.4.4 HTTP檔案頭58
3.4.5 HTTP動詞61
3.5 理解並選擇服務類型61
3.5.1 PHP和SOAP62
3.5.2 使用WSDL描述SOAP服務63
3.6 調試HTTP65
3.6.1 使用日誌收集信息65
3.6.2 檢查HTTP流量65
3.7 RPC服務66
3.7.1 使用一個RPC服務:Flickr示例66
3.7.2 建立一個RPC服務68
3.8 Ajax和Web服務69
3.9 開發和使用RESTful服務75
3.9.1 超越Pretty URL75
3.9.2 RESTful原則76
3.9.3 建立一個RESTful服務76
3.10 設計一個Web服務82
3.11 提供的服務83
第4章 設計模式84
4.1 什麼是設計模式84
4.1.1 選擇一個最合適的84
4.1.2 單例模式84
4.1.3 Traits86
4.1.4 註冊表模式87
4.1.5 工廠模式90
4.1.6 疊代模式91
4.1.7 觀察者模式98
4.1.8 依賴注入101
4.1.9 模型–視圖–控制器104
4.2 模式的形成114
第5章 安全性115
5.1 是否有些偏執115
5.2 過濾輸入、避免輸出116
5.3 跨站腳本117
5.3.1 攻擊117
5.3.2 修復118
5.3.3 線上資源119
5.4 偽造跨站請求119
5.4.1 攻擊119
5.4.2 修復120
5.4.3 線上資源121
5.5 會話固定122
5.5.1 攻擊122
5.5.2 修復122
5.5.3 線上資源123
5.6 會話劫持123
5.6.1 攻擊123
5.6.2 修復124
5.6.3 線上資源125
5.7 SQL注入125
5.7.1 攻擊125
5.7.2 修復126
5.7.3 線上資源127
5.8 儲存密碼127
5.8.1 攻擊127
5.8.2 修復127
5.8.3 線上資源128
5.9 暴力破解攻擊129
5.9.1 攻擊129
5.9.2 修復130
5.9.3 線上資源131
5.10 SSL131
5.10.1 攻擊131
5.10.2 修復132
5.10.3 線上資源132
5.11 資源132
第6章 性能134
6.1 基準測試134
6.2 系統測試139
6.2.1 代碼快取139
6.2.2 INI設定143
6.3 資料庫144
6.4 檔案系統144
6.5 程式概要分析151
6.5.1 安裝XHProf152
6.5.2 安裝XHGui155
6.6 本章小結161
第7章 自動測試163
7.1 單元測試163
7.1.1 安裝PHPUnit163
7.1.2 編寫測試用例163
7.1.3 運行測試165
7.1.4 測試替身167
7.1.5 編寫可測試的代碼170
7.1.6 測試視圖和控制器173
7.2 資料庫測試177
7.2.1 資料庫測試用例177
7.2.2 連線178
7.2.3 數據集178
7.2.4 斷言180
7.3 系統測試181
7.3.1 初始設定181
7.3.2 命令182
7.3.3 定位器183
7.3.4 斷言184
7.3.5 資料庫集成184
7.3.6 調試186
7.3.7 自動編寫測試187
7.4 負載測試187
7.4.1 ab187
7.4.2 Siege188
7.5 本章小結189
第8章 質量保證190
8.1 使用靜態分析工具測量質量190
8.1.1 phploc190
8.1.2 phpcpd191
8.1.3 phpmd192
8.2 編碼標準193
8.2.1 使用PHP代碼探測器檢查編碼標準193
8.2.2 查看違反編碼標準的地方195
8.2.3 PHP代碼探測器標準196
8.3 文檔和代碼196
8.3.1 使用phpDocumentor197
8.3.2 其他文檔工具199
8.4 原始碼管理199
8.4.1 使用集中式版本控制200
8.4.2 為了原始碼管理使用版本控制201
8.4.3 設計版本庫的結構202
8.4.4 分散式的版本控制204
8.4.5 代碼的社會性工具205
8.4.6 使用Git進行原始碼控制206
8.4.7 將版本庫作為構建過程的根207
8.5 自動部署207
8.5.1 立刻切換到一個新版本208
8.5.2 管理資料庫變更208
8.5.3 自動部署和Phing209
8.6 準備部署211
附錄A PEAR和PECL212
附錄B PHP標準庫229
附錄C 進一步參考信息236