本書以目前PHP的較新版本PHP 5.0為依托,結合PHP語言特性和實戰案例,充分融入了企業開發過程中編程人員遇到的種種核心技術問題的解決方案和編程思想,系統、全面地介紹了PHP語言的基礎知識、高級編程技術及應用方向。
書中的內容由淺入深、循序漸進,囊括了PHP基本語法、數組和常用函數、PHP面向對象的編程思想,還包括一些PHP高級特性,并且將一些比較流行的項目融入本書中,如仿記事狗微博系統、Smarty項目、博客管理系統等,使讀者在較短的時間內就能夠熟練掌握PHP特性和項目實戰的方方面面。
本書在講解的過程中,結合PHP知識點引用了大量的應用案例,并通過源代碼一一列舉,且每一部分內容都包含詳細的注釋和技巧提示,有助于初學者理解、把握問題的精髓,將所掌握的技術靈活應用到后期實際的項目開發過程中。
本書適合初學者使用,也可作為廣大軟件開發人員和編程愛好者的參考用書。
PHP(原為Personal Home Page的縮寫,現已更名為“PHP: Hypertext Preprocessor”,超文本預處理器)是一種通用的開源腳本語言。PHP吸收了C語言、Java和Perl的特點,入門門檻較低,易于學習,使用廣泛,主要適用于Web開發領域。
本書選用了大量的常見案例,將PHP語言特性通過實戰代碼一一呈現,使讀者不用刻意去記憶其中的理論,就可以輕松掌握編程技能。本書的案例代碼注釋詳細,很多部分都通過截圖的形式展現出來,讓讀者一目了然。書中具有代表性的操作通過步驟的形式一步一步地進行引導和講解,讓讀者不僅能知其所以然,而且還能編出自己的應用程序,具有較高的實用價值。講解過程中,還對初學者容易犯的一些錯誤提供了相應的解決方案和應注意的事項說明或提示。這些錯誤都是作者在開發和教學過程中實踐經驗的總結,目的是讓讀者在最短的時間內,掌握最核心、最實用的技術。
本書共分為16章,各章節簡介如下。
第1、2章:介紹PHP環境的安裝配置、PHP程序的開發過程和PHP語言的基本語法。
第3章:介紹函數的應用。PHP真正的威力源自于它的函數。
第4章:介紹一種非常重要的數據類型——數組。
第5、6章:介紹字符串操作,以及在字符串中占有舉足輕重地位的正則表達式。
第7章:介紹面向對象的程序開發,包括面向對象的編程思想:類和方法、魔術方法等。介紹面向對象的分析與設計思想以及一些常用的設計習慣,對后期編程將會起到一定的指導作用。
第8章:介紹錯誤與異常處理。錯誤與異常處理是PHP語言在健壯性上的體現,建議讀者能熟練掌握。
第9章:介紹PHP文件處理,包括對文件及目錄的多種操作,如創建、刪除、復制等。
第10章:介紹PHP文件上傳,主要針對文件上傳的相關函數進行講解。
第11章:介紹PHP的會話機制。會話機制在PHP中用于保存訪問中的數據。可以幫助開發者創建更為人性化的程序,增加站點的吸引力。
第12章:介紹PHP對數據庫的相關操作。開發過程中,大量數據被存儲在數據庫中,因此連接數據庫是任何一種語言都必須面對的,希望讀者對其中重要的應用和典型技巧能夠熟練地掌握。
第13章:介紹PHP的MVC設計模式。
第14~16章:介紹仿記事狗微博系統、Smarty項目、博客管理系統。通過多多研究和模仿,相信讀者會有意外的發現。
本書由耿興隆、張瑩、薛玉倩編著,同時參加本書編寫的人員還有張新穎、于坤、鄭經煜、李紅霞、李天志、孫連偉、吳慧龍、胡波、卞志成、肖立君、趙清晨、劉燁、容艷華、尼春雨、王國勝等。
由于編者水平有限,書中難免有疏漏和不足之處,懇請專家和廣大讀者指正。
編 者
第1章 PHP簡介1
1.1 PHP概述2
1.1.1 什么是PHP2
1.1.2 PHP的特點2
1.2 Windows下PHP運行環境的搭建3
1.2.1 安裝運行環境3
1.2.2 集成軟件介紹16
1.2.3 常用開發工具介紹17
1.2.4 第一個PHP程序18
1.3 上機練習18
第2章 PHP的基本語法19
2.1 PHP的重要符號20
2.1.1 PHP語言標記20
2.1.2 PHP代碼的注釋22
2.1.3 PHP的空白符24
2.1.4 PHP的指令分隔符24
2.2 PHP的數據類型25
2.2.1 標量數據類型26
2.2.2 復合數據類型31
2.2.3 特殊數據類型32
2.3 數據類型轉換34
2.3.1 隱式轉換(自動轉換)34
2.3.2 顯式轉換(強制轉換)36
2.4 常量與變量37
2.4.1 常量37
2.4.2 變量39
2.4.3 變量的作用域41
2.4.4 可變變量44
2.4.5 變量的銷毀45
2.5 PHP的運算符47
2.5.1 賦值運算符47
2.5.2 算術運算符48
2.5.3 比較運算符50
2.5.4 邏輯運算符51
2.5.5 按位運算符51
2.5.6 字符串運算符52
2.5.7 錯誤控制運算符53
2.5.8 其他運算符53
2.5.9 運算符的優先級54
2.6 流程控制語句55
2.6.1 條件控制語句55
2.6.2 循環控制語句59
2.6.3 跳轉控制語句62
2.7 上機練習64
第3章 函數的應用67
3.1 自定義函數68
3.1.1 函數定義與調用68
3.1.2 函數的參數69
3.1.3 函數返回值71
3.1.4 變量函數71
3.1.5 函數的引用72
3.1.6 遞歸函數73
3.2 內置函數74
3.2.1 日期時間函數74
3.2.2 數學函數78
3.2.3 變量相關的函數79
3.3 包含文件81
3.3.1 include和require81
3.3.2 include_once和require_once82
3.4 上機練習82
第4章 PHP數組83
4.1 數組的定義84
4.1.1 數組的聲明84
4.1.2 數組的分類85
4.1.3 數組的構造85
4.2 遍歷數組86
4.3 數組的常用操作90
4.3.1 統計數組元素個數90
4.3.2 數組與字符串的轉換91
4.3.3 數組的查找93
4.3.4 數組的排序94
4.3.5 數組的拆分與合并97
4.4 PHP預定義數組99
4.5 上機練習100
第5章 字符串操作101
5.1 認識字符串102
5.2 字符串表示形式102
5.3 字符串常用操作103
5.3.1 字符串連接103
5.3.2 獲取字符串長度104
5.3.3 去掉字符串的首尾空格和特殊字符104
5.3.4 大小寫轉換105
5.3.5 字符串截取106
5.3.6 字符串查找107
5.3.7 字符串替換107
5.4 上機練習108
第6章 正則表達式109
6.1 什么是正則表達式110
6.1.1 正則表達式簡介110
6.1.2 PHP中正則表達式的作用110
6.2 正則表達式的基礎語法110
6.2.1 元字符111
6.2.2 模式修正符112
6.3 POSIX擴展正則表達式函數113
6.3.1 字符串匹配函數——ereg()和eregi()113
6.3.2 字符串替換函數——ereg_replace()和eregi_replace()113
6.3.3 字符串拆分函數——split()和spliti()114
6.4 Perl兼容正則表達式函數115
6.4.1 對數組查詢匹配函數——preg_grep()116
6.4.2 字符串匹配函數preg_match()和preg_match_all()117
6.4.3 轉義特殊字符函數——preg_quote()118
6.4.4 搜索和替換函數——preg_replace()118
6.4.5 字符串拆分函數——preg_split()120
6.5 測試正則表達式120
6.5.1 RegexBuddy120
6.5.2 JavaScript正則表達式在線測試工具121
6.6 上機練習121
第7章 面向對象的程序開發123
7.1 面向對象的概念124
7.2 類和對象124
7.2.1 類和對象的關系124
7.2.2 類中的屬性125
7.2.3 類中的方法128
7.2.4 構造方法130
7.2.5 析構函數與PHP的垃圾回收機制131
7.3 繼承132
7.3.1 怎樣繼承一個類133
7.3.2 修飾符的使用135
7.3.3 重寫136
7.3.4 parent::關鍵字139
7.3.5 重載140
7.4 高級特性142
7.4.1 靜態屬性和方法142
7.4.2 final類和方法145
7.4.3 常量屬性147
7.4.4 abstract類和方法147
7.5 接口149
7.6 PHP 5中的魔術方法150
7.6.1 __set方法151
7.6.2 __get方法152
7.6.3 __call方法153
7.6.4 __toString方法154
7.7 上機練習154
第8章 錯誤和異常處理157
8.1 PHP的錯誤處理機制158
8.2 自定義錯誤處理160
8.3 PHP異常處理162
8.3.1 異常的拋出與捕獲162
8.3.2 基本異常(Exception)類介紹163
8.3.3 自定義異常164
8.3.4 捕獲多個異常165
8.4 上機練習166
第9章 PHP文件處理167
9.1 查看文件和目錄168
9.1.1 查看文件名稱168
9.1.2 顯示目錄名稱168
9.1.3 查看文件真實目錄169
9.2 查看文件信息169
9.2.1 顯示文件類型169
9.2.2 顯示文件訪問與修改時間170
9.2.3 獲取文件權限171
9.3 操作目錄171
9.3.1 創建目錄171
9.3.2 打開目錄172
9.3.3 關閉目錄173
9.3.4 讀取目錄173
9.3.5 刪除目錄173
9.4 操作文件174
9.4.1 打開文件/關閉文件174
9.4.2 讀取文件175
9.4.3 寫入文件178
9.4.4 刪除文件179
9.4.5 復制文件179
9.4.6 移動文件和重命名文件180
9.5 小結180
9.6 綜合練習181
第10章 PHP文件上傳183
10.1 文件上傳的基本知識184
10.1.1 文件上傳種類184
10.1.2 表單特性184
10.2 全局變量$_FILES185
10.3 單文件上傳185
10.4 多文件上傳188
10.5 綜合練習189
10.6 小結192
第11章 PHP的會話機制193
11.1 通過Session和Cookie實現會話處理194
11.2 使用Session194
11.2.1 什么是Session194
11.2.2 Session的常用函數194
11.2.3 Session的生命周期197
11.2.4 使用Session控制PHP頁面緩存197
11.2.5 Session的安全問題198
11.3 使用Cookie199
11.3.1 什么是Cookie199
11.3.2 Cookie的工作機制200
11.3.3 Cookie的創建與銷毀200
11.3.4 PHP中怎樣獲取Cookie203
11.4 使用Session和Cookie時應注意的問題203
11.5 綜合練習204
11.6 小結205
第12章 PHP操作MySQL數據庫207
12.1 數據庫的訪問208
12.1.1 連接MySQL服務器208
12.1.2 關閉MySQL連接208
12.1.3 選擇MySQL數據庫209
12.1.4 執行SQL語句209
12.1.5 處理查詢結果集210
12.1.6 SQL語句的基本使用213
12.1.7 MySQL用戶的創建與授權217
12.2 數據庫的操作220
12.2.1 獲取服務器上的所有數據庫220
12.2.2 獲取數據庫內的表221
12.2.3 獲取數據表的字段信息221
12.2.4 獲取錯誤信息222
12.2.5 兩個小應用222
12.3 PHP操作MySQL數據庫225
12.3.1 添加留言信息225
12.3.2 分頁顯示留言信息228
12.3.3 查詢單條留言的詳細信息230
12.3.4 編輯留言信息231
12.3.5 刪除留言信息233
12.4 小結234
12.5 上機練習234
第13章 PHP MVC程序設計237
13.1 MVC簡介238
13.1.1 模型238
13.1.2 視圖238
13.1.3 控制器238
13.2 使用MVC開發微博項目238
13.2.1 需求分析238
13.2.2 用例圖239
13.2.3 數據庫結構239
13.2.4 項目及數據庫搭建240
13.3 Smarty簡介261
13.4 Smarty的安裝與配置262
13.4.1 Smarty的安裝263
13.4.2 Smarty的配置264
13.4.3 第一個Smarty程序266
13.5 Smarty的使用步驟267
13.6 Smarty變量269
13.6.1 在模板中輸出PHP分配的變量269
13.6.2 模板中輸出PHP分配的變量271
13.6.3 變量調節器272
13.6.4 Smarty中變量的使用278
13.6.5 Smarty中流程控制語句的使用279
13.6.6 開啟緩存279
13.6.7 設置緩存生命周期280
13.7 流程控制281
13.7.1 條件選擇結構if-else281
13.7.2 foreach語句282
13.7.3 section284
13.8 Smarty的緩存處理285
13.8.1 在Smarty中控制緩存285
13.8.2 一個頁面多個緩存286
13.8.3 為緩存實例消除處理開銷287
13.8.4 清除緩存288
13.8.5 關閉局部緩存288
13.9 綜合練習290
13.10 小結305
第14章 仿記事狗微博項目307
14.1 系統概述308
14.2 需求分析308
14.3 開發環境308
14.4 數據庫結構308
14.5 項目的開發310
14.5.1 用戶注冊310
14.5.2 用戶登錄314
14.5.3 首頁顯示315
14.6 總結328
第15章 Smarty項目329
15.1 系統概述330
15.2 需求分析330
15.3 開發環境330
15.4 數據庫結構330
15.5 后臺功能的實現332
15.5.1 管理用戶登錄332
15.5.2 后臺主界面334
15.5.3 景點列表頁面335
15.5.4 景點列表的編輯338
15.5.5 景點信息的添加340
15.6 前臺界面343
15.6.1 前臺首頁面343
15.6.2 杭州旅游的主頁347
15.6.3 景點大全353
15.7 總結358
15.8 上機練習358
第16章 博客管理系統(Apache+PHP+MySQL實現)359
16.1 需求分析360
16.2 系統設計360
16.2.1 系統功能結構360
16.2.2 系統流程圖361
16.2.3 開發環境361
16.2.4 文件夾的組織結構362
16.3 數據庫設計362
16.3.1 數據庫概念設計362
16.3.2 數據庫物理結構設計363
16.4 首頁設計364
16.4.1 首頁技術分析365
16.4.2 首頁的實現過程365
16.5 博文管理模塊的設計370
16.5.1 博文管理模塊的技術分析370
16.5.2 添加博文的實現過程372
16.5.3 博文列表的實現過程373
16.5.4 查看博文、評論的實現過程377
16.5.5 刪除文章、評論的實現過程383
16.6 圖片上傳模塊的設計384
16.6.1 圖片上傳模塊的技術分析384
16.6.2 圖片上傳的實現過程385
16.6.3 圖片瀏覽與刪除的實現過程386
16.7 朋友圈模塊設計392
16.7.1 朋友圈模塊技術分析392
16.7.2 查詢好友的實現過程393
16.8 本章總結398