本書共分14章,主要內(nèi)容包括PHP環(huán)境的搭建、PHP開發(fā)工具、變量和常量、運(yùn)算符與表達(dá)式、流程控制、數(shù)學(xué)函數(shù)、字符串搜索和截取、文件讀寫、文件上傳與下載等。在應(yīng)用方面介紹了PHP獲取HTML表單數(shù)據(jù),獲取Cookie和Session數(shù)據(jù),獲取數(shù)據(jù)庫(kù)數(shù)據(jù),獲取XML和JSON數(shù)據(jù),獲取Ajax異步數(shù)據(jù)等知識(shí)。*后一章介紹了常用的幾種設(shè)計(jì)模式在PHP中的實(shí)現(xiàn),如單例模式、工廠方法、適配器模式和狀態(tài)模式等。
本書可以作為高等院校計(jì)算機(jī)相關(guān)專業(yè)PHP語(yǔ)言程序設(shè)計(jì)課程的教材,也可以作為PHP程序設(shè)計(jì)的培訓(xùn)教材,還可以作為自學(xué)者的參考書。
知識(shí)點(diǎn)全
本書緊密圍繞PHP語(yǔ)言展開講解,具有很強(qiáng)的邏輯性和系統(tǒng)性。
實(shí)例豐富
書中各實(shí)例均經(jīng)過作者精心設(shè)計(jì)和挑選,它們都是根據(jù)作者在實(shí)際開發(fā)中的經(jīng)驗(yàn)總結(jié)而來的,涵蓋了在實(shí)際開發(fā)中所遇到的各種問題。
應(yīng)用廣泛
對(duì)于精選案例,給出了詳細(xì)步驟,結(jié)構(gòu)清晰簡(jiǎn)明,分析深入淺出,而且有些程序能夠直接在項(xiàng)目中使用,避免讀者進(jìn)行重復(fù)開發(fā)。
基于理論,注重實(shí)踐
在講述過程中,不只是介紹理論知識(shí),而且在合適位置安排綜合應(yīng)用實(shí)例,或者小型應(yīng)用程序,將理論知識(shí)應(yīng)用到實(shí)踐中,來加強(qiáng)讀者的實(shí)際應(yīng)用能力,鞏固所學(xué)的相關(guān)知識(shí)。
前言
PHP是全球最普及、應(yīng)用最廣泛的互聯(lián)網(wǎng)開發(fā)語(yǔ)言之一,它有開放的源代碼、獨(dú)特的語(yǔ)法結(jié)構(gòu),包含了C、Java、Perl等語(yǔ)言的特點(diǎn),具備多種數(shù)據(jù)庫(kù)和操作系統(tǒng)的支持,而且是完全免費(fèi)的。
越來越多的大公司,如IBM、Adobe、Cisco等,都已經(jīng)在應(yīng)用PHP技術(shù),PHP已成為眾多開發(fā)者的首選語(yǔ)言。
為了幫助廣大讀者掌握PHP開發(fā)技術(shù),作者精心編寫了本書。本書以PHP5為例,詳細(xì)介紹使用PHP進(jìn)行網(wǎng)站開發(fā)所需掌握的各方面知識(shí)。本書可作為各院校在校生和相關(guān)授課老師的教材,也可以作為編程自學(xué)者的入門參考書。
本書內(nèi)容
本書共分14章,主要內(nèi)容如下。
第1章PHP入門基礎(chǔ)。主要介紹PHP語(yǔ)言的基礎(chǔ)知識(shí),包括PHP發(fā)展史、PHP環(huán)境的搭建、PHP語(yǔ)法風(fēng)格和注釋、PHP的集成環(huán)境以及第三方開發(fā)工具。
第2章PHP基礎(chǔ)語(yǔ)法。詳細(xì)介紹PHP程序中的基本數(shù)據(jù)類型、變量、常量、運(yùn)算符和表達(dá)式等相關(guān)知識(shí)。
第3章流程控制語(yǔ)句。首先簡(jiǎn)單介紹算法的描述方式,重點(diǎn)介紹PHP條件語(yǔ)句和循環(huán)語(yǔ)句的使用,包括if、switch、for、while、dowhile、break等。
第4章PHP函數(shù)。首先介紹如何自定義函數(shù),調(diào)用函數(shù)和為函數(shù)指定參數(shù),然后介紹了PHP中的數(shù)學(xué)函數(shù)、日期和時(shí)間類函數(shù)、文件包含函數(shù)。
第5章面向?qū)ο缶幊獭:?jiǎn)單介紹面向?qū)ο蟮母拍睿攸c(diǎn)對(duì)PHP中的實(shí)現(xiàn)進(jìn)行介紹,包括創(chuàng)建類、構(gòu)造函數(shù)、類常量、類的方法、PHP作用域關(guān)鍵字以及繼承的實(shí)現(xiàn)等。
第6章數(shù)組的應(yīng)用。主要介紹PHP對(duì)數(shù)組的操作,包括定義數(shù)組、遍歷數(shù)組、數(shù)組元素的管理,數(shù)組排序、合并以及替換和搜索等。
第7章字符串應(yīng)用。詳細(xì)介紹PHP支持的字符串操作,包括字符串的字義,對(duì)字符串進(jìn)行大小寫統(tǒng)一、替換、截取、填充、編碼以及解碼等。
第8章文件處理。詳細(xì)介紹PHP支持的文件操作,像獲取文件的大小、讀取文件的一行、寫入內(nèi)容、刪除文件、創(chuàng)建目錄、解析文件名以及獲取可用空間等。
第9章獲取頁(yè)面數(shù)據(jù)。主要介紹獲取HTML表單數(shù)據(jù)的方法,包括HTML表單元素、表單提交方法、獲取單選和多選值、URL編碼和解碼、文件的上傳和下載等。
第10章會(huì)話處理。主要介紹在PHP中使用Cookie和Session保存數(shù)據(jù)、讀取數(shù)據(jù)、設(shè)置數(shù)據(jù)有效期的方法。
第11章數(shù)據(jù)庫(kù)編程。主要介紹PHP獲取MySQL數(shù)據(jù)的方法,包括MySQL的安裝和配置、數(shù)據(jù)庫(kù)的連接和關(guān)閉、執(zhí)行更新語(yǔ)句、獲取Select結(jié)果、獲取列信息、使用預(yù)處理語(yǔ)句以及亂碼的解決方案。
第12章XML和JSON處理。首先介紹XML的語(yǔ)法,然后介紹PHP操作XML的解析器以及解析方法,最后對(duì)JSON的編碼和解碼進(jìn)行介紹。
第13章PHP高級(jí)編程技術(shù)。從4個(gè)方面介紹PHP的高級(jí)編程技術(shù),分別是正則表達(dá)式的處理、異常處理、Ajax異步通信以及常用PHP編程規(guī)范。
第14章PHP設(shè)計(jì)模式。首先介紹設(shè)計(jì)模式的概念和分類,然后介紹常用的設(shè)計(jì)模式,包括單例模式、簡(jiǎn)單工廠、工廠方法、抽象工廠、適配器模式、外觀模式、觀察者模式和狀態(tài)模式。
本書特色
本書中的大量?jī)?nèi)容來自真實(shí)的程序范例,使讀者更容易掌握PHP程序的開發(fā)技能。本書難度適中,內(nèi)容由淺入深,實(shí)用性強(qiáng),覆蓋面廣,條理清晰。
知識(shí)點(diǎn)全
本書緊密圍繞PHP語(yǔ)言展開講解,具有很強(qiáng)的邏輯性和系統(tǒng)性。
實(shí)例豐富
書中各實(shí)例均經(jīng)過作者精心設(shè)計(jì)和挑選,它們都是根據(jù)作者在實(shí)際開發(fā)中的經(jīng)驗(yàn)總結(jié)而來的,涵蓋了在實(shí)際開發(fā)中所遇到的各種問題。
應(yīng)用廣泛
對(duì)于精選案例,給出了詳細(xì)步驟,結(jié)構(gòu)清晰簡(jiǎn)明,分析深入淺出,而且有些程序能夠直接在項(xiàng)目中使用,避免讀者進(jìn)行重復(fù)開發(fā)。
基于理論,注重實(shí)踐
在講述過程中,不只是介紹理論知識(shí),而且在合適位置安排綜合應(yīng)用實(shí)例,或者小型應(yīng)用程序,將理論知識(shí)應(yīng)用到實(shí)踐中,來加強(qiáng)讀者的實(shí)際應(yīng)用能力,鞏固所學(xué)的相關(guān)知識(shí)。
貼心的提示
為了便于讀者閱讀,全書還穿插著一些技巧、提示等小貼士,體例約定如下。
提示:通常是一些貼心的提醒,讓讀者加深印象或得到解決問題的方法。
注意:提出學(xué)習(xí)過程中需要特別注意的一些知識(shí)點(diǎn)和內(nèi)容,或者相關(guān)信息。
技巧:通過簡(jiǎn)短的文字,指出知識(shí)點(diǎn)在應(yīng)用時(shí)的一些小竅門。
讀者對(duì)象
本書適合作為軟件開發(fā)入門者的自學(xué)用書,也適合作為高等院校相關(guān)專業(yè)的教學(xué)用書,還可供在職開發(fā)人員查閱、參考。本書尤其適合下列人員使用:
?PHP語(yǔ)言開發(fā)入門者。
?PHP語(yǔ)言的初學(xué)者以及在校學(xué)生。
?準(zhǔn)備從事PHP開發(fā)的相關(guān)人員。
?各大中專院校的在校學(xué)生和相關(guān)的授課老師。
?有一定編程基礎(chǔ),想進(jìn)一步提高技能的人員。
本書由李鑫、王瑞敬編著,參與編寫的人員還有鄭志榮、侯艷書、劉利利、侯政洪、肖進(jìn)、李海燕、侯政云、祝紅濤、崔再喜、賀春雷等,在此表示感謝。在本書的編寫過程中,我們力求精益求精,但難免存在疏漏和不足之處,敬請(qǐng)廣大讀者批評(píng)指正。
編者
李鑫,具有多年.NET項(xiàng)目開發(fā)經(jīng)驗(yàn),深入掌握.NET框架技術(shù),熟練開發(fā)ASP.NET與WinForm項(xiàng)目,精通C#、ASP 、C++、VB語(yǔ)言,熟練使用MTS、COM+、Web Service分布式架構(gòu)。
王瑞敬,互聯(lián)網(wǎng)社區(qū)架構(gòu)師,一個(gè)擁有5年軟件工程經(jīng)驗(yàn)和深厚理論基礎(chǔ)的軟件工程專家,善于解剖和分析問題,使用生動(dòng)形象的比喻,將復(fù)雜的、難于理解的問題與知識(shí)簡(jiǎn)單化講解。致力于研究、優(yōu)化Web 2.0系統(tǒng)架構(gòu)技術(shù),對(duì)LAMP體系架構(gòu)有著豐富的經(jīng)驗(yàn),挖掘LAMP架構(gòu)的性能潛力,探索新型高效能的Web 2.0站點(diǎn)系統(tǒng)支撐平臺(tái)以及系統(tǒng)集群。
第1 章 PHP 入門基礎(chǔ)
1.1 PHP 簡(jiǎn)介 ………………………………2
1.1.1 PHP 發(fā)展歷史 …………………… 2
1.1.2 PHP 的優(yōu)勢(shì) ……………………… 3
1.2 配置PHP 運(yùn)行環(huán)境 ……………………4
1.2.1 高手帶你做——安裝Apache …… 4
1.2.2 高手帶你做——配置PHP 5 …… 5
1.3 查看PHP 配置文件 ……………………8
1.4 選擇PHP 語(yǔ)法風(fēng)格 ……………………9
1.4.1 默認(rèn)標(biāo)記 ………………………… 9
1.4.2 ASP 風(fēng)格標(biāo)記 …………………… 9
1.4.3 腳本標(biāo)記 ……………………… 10
1.4.4 短標(biāo)記 ………………………… 10
1.5 程序注釋 …………………………… 12
1.5.1 單行注釋 ……………………… 12
1.5.2 多行注釋 ……………………… 12
1.6 快速搭建PHP 環(huán)境 ………………… 13
1.6.1 高手帶你做——安裝WampServer … 13
1.6.2 高手帶你做——安裝phpStudy … 15
1.7 PHP 開發(fā)工具 ……………………… 17
1.7.1 Sublime Text …………………… 17
1.7.2 PhpStorm ……………………… 19
1.8 高手帶你做——自定義Apache
的主目錄 …………………………… 21
1.9 高手帶你做——在IIS 上配置PHP
環(huán)境 ………………………………… 22
1.10 成長(zhǎng)任務(wù) …………………………… 24
第2 章 PHP 基礎(chǔ)語(yǔ)法
2.1 常量 ………………………………… 26
2.1.1 定義常量 ……………………… 26
2.1.2 引用常量 ……………………… 26
2.1.3 const 關(guān)鍵字 …………………… 27
2.1.4 高手帶你做——認(rèn)識(shí)魔術(shù)常量 … 28
2.2 變量 ………………………………… 29
2.2.1 聲明變量 ……………………… 29
2.2.2 變量賦值 ……………………… 30
2.2.3 可變變量 ……………………… 31
2.2.4 變量的作用域 ………………… 32
2.2.5 變量銷毀 ……………………… 35
2.2.6 高手帶你做——超級(jí)全局變量 … 35
2.3 數(shù)據(jù)類型 …………………………… 36
2.3.1 標(biāo)量數(shù)據(jù)類型 ………………… 36
2.3.2 復(fù)合數(shù)據(jù)類型 ………………… 40
2.3.3 特殊數(shù)據(jù)類型 ………………… 41
2.4 數(shù)據(jù)類型轉(zhuǎn)換 ……………………… 43
2.4.1 強(qiáng)制類型轉(zhuǎn)換 ………………… 43
2.4.2 自動(dòng)類型轉(zhuǎn)換 ………………… 45
2.4.3 數(shù)據(jù)類型函數(shù) ………………… 46
2.5 運(yùn)算符 ……………………………… 47
2.5.1 算術(shù)運(yùn)算符 …………………… 47
2.5.2 賦值運(yùn)算符 …………………… 48
2.5.3 邏輯運(yùn)算符 …………………… 48
2.5.4 比較運(yùn)算符 …………………… 49
2.5.5 位運(yùn)算符 ……………………… 50
2.5.6 遞增與遞減運(yùn)算符 …………… 50
2.5.7 錯(cuò)誤控制運(yùn)算符 ……………… 51
2.6 高手帶你做——認(rèn)識(shí)條件運(yùn)算符 …… 52
2.7 表達(dá)式 ……………………………… 53
2.8 運(yùn)算符的優(yōu)先級(jí) …………………… 54
2.9 PHP 輸出函數(shù) ……………………… 55
2.9.1 echo() 函數(shù) …………………… 55
2.9.2 print() 函數(shù) …………………… 56
2.9.3 printf() 函數(shù) …………………… 58
2.9.4 格式控制 ……………………… 58
2.9.5 sprintf() 函數(shù) …………………… 60
2.9.6 高手帶你做——考生信息輸出 … 61
2.10 成長(zhǎng)任務(wù) …………………………… 62
第3 章 流程控制語(yǔ)句
3.1 了解算法 …………………………… 64
3.1.1 算法的定義 …………………… 64
3.1.2 高手帶你做——使用算法
求1 到4 的和 ………………… 64
3.1.3 算法描述方式 ………………… 65
3.2 順序結(jié)構(gòu) …………………………… 68
3.2.1 語(yǔ)句編寫方式 ………………… 68
3.2.2 空語(yǔ)句 ………………………… 69
3.2.3 表達(dá)式語(yǔ)句 …………………… 69
3.2.4 復(fù)合語(yǔ)句 ……………………… 69
3.3 if 條件語(yǔ)句 …………………………… 70
3.3.1 if 語(yǔ)句的語(yǔ)法 ………………… 70
3.3.2 雙條件if 語(yǔ)句 ………………… 72
3.3.3 多條件if 語(yǔ)句 ………………… 73
3.3.4 高手帶你做——嵌套if 的使用 … 74
3.4 switch 條件語(yǔ)句 ……………………… 75
3.4.1 switch 語(yǔ)句的格式 …………… 75
3.4.2 if 語(yǔ)句和switch 語(yǔ)句的區(qū)別 …… 77
3.4.3 高手帶你做——根據(jù)出生
日期判斷星座 ………………… 78
3.5 循環(huán)語(yǔ)句 …………………………… 79
3.5.1 while 語(yǔ)句 ……………………… 79
3.5.2 do while 語(yǔ)句 ………………… 80
3.5.3 for 語(yǔ)句 ………………………… 81
3.5.4 高手帶你做——九九乘法口訣表 … 84
3.5.5 foreach 語(yǔ)句 …………………… 85
3.6 其他語(yǔ)句 …………………………… 86
3.6.1 return 語(yǔ)句 …………………… 87
3.6.2 break 語(yǔ)句 ……………………… 88
3.6.3 continue 語(yǔ)句 ………………… 89
3.6.4 goto 語(yǔ)句 ……………………… 90
3.7 高手帶你做——判斷閏年 …………… 91
3.8 高手帶你做——輸出楊輝三角形 …… 92
3.9 成長(zhǎng)任務(wù) …………………………… 93
第4 章 PHP 函數(shù)
4.1 用戶函數(shù) …………………………… 96
4.1.1 函數(shù)定義的語(yǔ)法結(jié)構(gòu) ………… 96
4.1.2 使用函數(shù) ……………………… 97
4.1.3 函數(shù)的返回值 ………………… 97
4.1.4 按值傳遞參數(shù) ………………… 98
4.1.5 按引用傳遞參數(shù) ……………… 99
4.1.6 默認(rèn)值傳遞參數(shù) ……………… 100
4.1.7 可變參數(shù)列表 ………………… 101
4.1.8 變量、常量與函數(shù) …………… 102
4.1.9 高手帶你做——判斷函數(shù)
是否存在 ……………………… 103
4.2 高手帶你做——函數(shù)高級(jí)應(yīng)用 ………103
4.2.1 遞歸函數(shù) ……………………… 104
4.2.2 嵌套函數(shù) ……………………… 104
4.2.3 變量函數(shù) ……………………… 105
4.3 變量處理函數(shù) ………………………106
4.4 數(shù)學(xué)函數(shù) ……………………………106
4.5 日期和時(shí)間函數(shù) ……………………107
4.5.1 checkdate() 函數(shù) ……………… 108
4.5.2 getdate() 函數(shù) ………………… 108
4.5.3 date() 函數(shù) ……………………… 109
4.5.4 strtotime() 函數(shù) ………………… 111
4.5.5 microtime() 函數(shù) ……………… 112
4.5.6 gmdate() 函數(shù) ………………… 112
4.5.7 time() 函數(shù) …………………… 112
4.6 實(shí)戰(zhàn)——模擬實(shí)現(xiàn)用戶系統(tǒng)
登錄功能 ……………………………113
4.7 引用文件的函數(shù) ……………………114
4.7.1 include() 函數(shù) ………………… 115
4.7.2 require() 函數(shù) ………………… 116
4.7.3 include_once() 函數(shù)和
require_once() 函數(shù) …………… 118
4.8 成長(zhǎng)任務(wù) ……………………………120
第5 章 面向?qū)ο缶幊?br />
5.1 面向?qū)ο蠛?jiǎn)介 ………………………122
5.1.1 對(duì)象的概念 …………………… 122
5.1.2 抽象性 ………………………… 122
5.1.3 封裝性 ………………………… 123
5.1.4 繼承性 ………………………… 123
5.1.5 多態(tài)性 ………………………… 124
5.2 類和對(duì)象 ……………………………125
5.2.1 高手帶你做——認(rèn)識(shí)類和對(duì)象 … 125
5.2.2 定義類 ………………………… 126
5.2.3 實(shí)例化類 ……………………… 127
5.3 類的成員 ……………………………127
5.3.1 常量 …………………………… 127
5.3.2 字段 …………………………… 128
5.3.3 屬性 …………………………… 131
5.3.4 方法 …………………………… 133
5.4 構(gòu)造函數(shù)和析構(gòu)函數(shù) ………………134
5.4.1 構(gòu)造函數(shù) ……………………… 135
5.4.2 高手帶你做——查看個(gè)人信息 … 136
5.4.3 析構(gòu)函數(shù) ……………………… 137
5.5 作用域關(guān)鍵字 ………………………138
5.5.1 abstract 關(guān)鍵字 ………………… 138
5.5.2 final 關(guān)鍵字 …………………… 139
5.5.3 private 關(guān)鍵字 ………………… 139
5.5.4 protected 關(guān)鍵字 ……………… 140
5.5.5 public 關(guān)鍵字 ………………… 141
5.5.6 static 關(guān)鍵字 …………………… 142
5.6 繼承 …………………………………143
5.6.1 類繼承 ………………………… 143
5.6.2 構(gòu)造函數(shù)繼承 ………………… 145
5.6.3 高手帶你做——實(shí)現(xiàn)圖書
分類顯示 ……………………… 146
5.7 PHP 實(shí)現(xiàn)接口 ………………………148
5.7.1 接口概述 ……………………… 148
5.7.2 定義接口 ……………………… 149
5.7.3 實(shí)現(xiàn)接口 ……………………… 149
5.8 成長(zhǎng)任務(wù) ……………………………152
第6 章 數(shù)組的應(yīng)用
6.1 認(rèn)識(shí)數(shù)組 ……………………………154
6.2 基本操作 ……………………………155
6.2.1 通過賦值創(chuàng)建數(shù)組 …………… 155
6.2.2 使用array() 函數(shù)創(chuàng)建數(shù)組 …… 156
6.2.3 創(chuàng)建多維數(shù)組 ………………… 157
6.2.4 輸出數(shù)組內(nèi)容 ………………… 159
6.2.5 測(cè)試數(shù)組 ……………………… 160
6.3 遍歷數(shù)組 ……………………………161
6.3.1 foreach 語(yǔ)句遍歷 ……………… 161
6.3.2 for 語(yǔ)句遍歷 …………………… 162
6.3.3 each() 函數(shù)遍歷 ……………… 163
6.3.4 遍歷數(shù)組的函數(shù) ……………… 164
6.4 簡(jiǎn)單計(jì)算 ……………………………164
6.4.1 計(jì)算元素總數(shù) ………………… 164
6.4.2 計(jì)算元素出現(xiàn)的頻率 ………… 165
6.4.3 計(jì)算出現(xiàn)的所有元素 ………… 166
6.5 元素操作 ……………………………166
6.5.1 增加元素 ……………………… 167
6.5.2 刪除元素 ……………………… 169
6.5.3 定位元素 ……………………… 170
6.5.4 提取元素 ……………………… 173
6.6 數(shù)組排序 ……………………………176
6.6.1 按值排序 ……………………… 176
6.6.2 按鍵排序 ……………………… 178
6.6.3 關(guān)聯(lián)排序 ……………………… 179
6.6.4 高手帶你做——級(jí)聯(lián)排序 …… 181
6.6.5 高手帶你做——按先奇后偶
的降序排列數(shù)組 ……………… 182
6.7 其他操作 ……………………………183
6.7.1 高手帶你做——隨機(jī)獲取元素 … 183
6.7.2 聯(lián)合數(shù)組 ……………………… 184
6.7.3 合并數(shù)組 ……………………… 185
6.7.4 拆分?jǐn)?shù)組 ……………………… 187
6.7.5 替換數(shù)組 ……………………… 188
6.7.6 判斷數(shù)組的類型 ……………… 189
6.7.7 查找鍵名是否存在 …………… 190
6.7.8 查找值是否存在 ……………… 191
6.7.9 去除重復(fù)元素值 ……………… 192
6.7.10 高手帶你做——數(shù)組鍵名和
值調(diào)換 ………………………… 193
6.8 成長(zhǎng)任務(wù) ……………………………194
第7 章 字符串應(yīng)用
7.1 字符串簡(jiǎn)介 …………………………196
7.2 定義字符串 …………………………196
7.2.1 使用單引號(hào) …………………… 197
7.2.2 使用雙引號(hào) …………………… 197
7.2.3 使用定界符 …………………… 198
7.3 高手帶你做——連接多個(gè)字符串 ……199
7.4 統(tǒng)計(jì)字符串 …………………………199
7.4.1 統(tǒng)計(jì)字符串的長(zhǎng)度 …………… 200
7.4.2 統(tǒng)計(jì)字符的出現(xiàn)頻率 ………… 200
7.4.3 統(tǒng)計(jì)單詞數(shù)量 ………………… 201
7.5 操作字符串內(nèi)容 ……………………202
7.5.1 大小寫替換 …………………… 202
7.5.2 去除空格和特殊字符 ………… 204
7.5.3 比較字符串 …………………… 206
7.5.4 查找字符串 …………………… 208
7.6 操作子字符串 ………………………210
7.6.1 分隔字符串 …………………… 210
7.6.2 填充字符串 …………………… 212
7.6.3 截取字符串 …………………… 213
7.6.4 替換字符串 …………………… 216
7.7 高手帶你做——字符串與
HTML 轉(zhuǎn)換 …………………………218
7.8 字符串編碼 …………………………222
7.8.1 高手帶你做——認(rèn)識(shí)字符集
與編碼 ………………………… 222
7.8.2 頁(yè)面編碼設(shè)置 ………………… 225
7.8.3 編碼轉(zhuǎn)換 ……………………… 227
7.8.4 字符串加密 …………………… 228
7.9 成長(zhǎng)任務(wù) ……………………………230
第8 章 文件處理
8.1 查看文件屬性信息 ……………………232
8.1.1 文件類型 ……………………… 232
8.1.2 文件大小 ……………………… 232
8.1.3 訪問和修改時(shí)間 ……………… 233
8.1.4 其他屬性的獲取 ……………… 234
8.2 高手帶你做——操作文件 ……………235
8.2.1 復(fù)制文件 ……………………… 236
8.2.2 重命名文件 …………………… 236
8.2.3 刪除文件 ……………………… 236
8.3 打開和關(guān)閉文件 ……………………237
8.3.1 打開文件 ……………………… 237
8.3.2 關(guān)閉文件 ……………………… 238
8.4 讀取文件 ………………………………238
8.4.1 讀取一行 ……………………… 239
8.4.2 讀取指定字節(jié) ………………… 242
8.4.3 讀取全部?jī)?nèi)容 ………………… 244
8.4.4 其他讀取函數(shù) ………………… 245
8.5 寫入文件 ………………………………246
8.5.1 fwrite() 函數(shù) …………………… 247
8.5.2 fputs() 函數(shù) …………………… 248
8.5.3 file_put_contents() 函數(shù) ……… 249
8.6 高手帶你做——認(rèn)識(shí)文件指針 ………250
8.6.1 fseek() 函數(shù) …………………… 251
8.6.2 ftell() 函數(shù) ……………………… 251
8.6.3 rewind() 函數(shù) ………………… 252
8.7 操作目錄 ……………………………252
8.7.1 打開目錄 ……………………… 252
8.7.2 關(guān)閉目錄 ……………………… 253
8.7.3 遍歷目錄 ……………………… 253
8.7.4 創(chuàng)建目錄 ……………………… 256
8.7.5 刪除目錄 ……………………… 256
8.8 解析路徑 ……………………………257
8.8.1 獲取文件名 …………………… 257
8.8.2 獲取目錄部分 ………………… 257
8.8.3 獲取路徑中的各個(gè)部分 ……… 257
8.8.4 獲取絕對(duì)路徑 ………………… 258
8.9 讀取磁盤屬性 ………………………259
8.9.1 獲取目錄所在磁盤的
可用空間 ……………………… 259
8.9.2 獲取磁盤總?cè)萘?……………… 260
8.9.3 高手帶你做——獲取目錄
占用的空間 …………………… 260
8.10 高手帶你做——實(shí)現(xiàn)項(xiàng)目的新增
和保存 ………………………………262
8.11 成長(zhǎng)任務(wù) ……………………………265
第9 章 獲取頁(yè)面數(shù)據(jù)
9.1 認(rèn)識(shí)HTML 表單 ……………………268
9.2 制作HTML 表單 ……………………268
9.2.1 表單的組成元素 ……………… 269
9.2.2 表單標(biāo)簽 ……………………… 270
9.2.3 文本框 ………………………… 270
9.2.4 多行文本框 …………………… 271
9.2.5 隱藏域 ………………………… 271
9.2.6 復(fù)選框 ………………………… 272
9.2.7 單選按鈕 ……………………… 272
9.2.8 下拉選擇框 …………………… 273
9.2.9 文件上傳框 …………………… 274
9.2.10 表單按鈕 ……………………… 274
9.3 獲取表單數(shù)據(jù) ………………………275
9.3.1 設(shè)置表單提交方式 …………… 276
9.3.2 獲取GET 提交的數(shù)據(jù) ………… 277
9.3.3 獲取POST 提交的數(shù)據(jù) ……… 279
9.4 表單的常見操作 ……………………280
9.4.1 遍歷表單 ……………………… 280
9.4.2 獲取表單中的多值 …………… 282
9.4.3 高手帶你做——?jiǎng)討B(tài)生成表單 … 284
9.5 高手帶你做——表單處理技巧 ………288
9.5.1 檢測(cè)表單提交路徑 …………… 288
9.5.2 避免表單重復(fù)提交 …………… 290
9.5.3 表單過期處理 ………………… 292
9.6 轉(zhuǎn)換URL 中的漢字 …………………293
9.6.1 編碼操作 ……………………… 293
9.6.2 解碼操作 ……………………… 293
9.7 文件上傳 ……………………………294
9.7.1 準(zhǔn)備文件上傳表單 …………… 294
9.7.2 處理上傳文件 ………………… 295
9.8 文件下載 ……………………………297
9.9 高手帶你做——身份驗(yàn)證 ……………299
9.9.1 HTTP 身份驗(yàn)證 ……………… 299
9.9.2 PHP 身份認(rèn)證 ………………… 300
9.10 成長(zhǎng)任務(wù) ……………………………303
第2章PHP基礎(chǔ)語(yǔ)法
要想編寫規(guī)范、可讀性高的PHP程序,就必須對(duì)PHP基本語(yǔ)法有所了解。基本語(yǔ)法是所有編程語(yǔ)言都必須掌握的基礎(chǔ)知識(shí),也是整個(gè)程序代碼不可缺少的重要部分。
一個(gè)PHP程序通常由數(shù)據(jù)類型、變量、運(yùn)算符和控制流程語(yǔ)句4部分組成。其中數(shù)據(jù)類型和運(yùn)算符不僅定義了語(yǔ)言的規(guī)范,還決定了可以執(zhí)行什么樣的操作;變量用來存儲(chǔ)指定類型的數(shù)據(jù),其值在程序運(yùn)行期間是可變的;與變量對(duì)應(yīng)的還有一個(gè)常量,其值是固定的。
本章詳細(xì)介紹PHP程序中的基本數(shù)據(jù)類型、變量、常量、運(yùn)算符、表達(dá)式等相關(guān)知識(shí),控制流程在下一章介紹。對(duì)初學(xué)者來說,應(yīng)該對(duì)本章的每個(gè)小節(jié)進(jìn)行仔細(xì)閱讀、思考,這樣才能達(dá)到事半功倍的效果。
2.1常量
常量是指在程序的整個(gè)運(yùn)行過程中值保持不變的量。在這里要注意,常量和常量值是不同的概念。常量值是常量的具體和直觀的表現(xiàn)形式;常量是形式化的表現(xiàn)。通常在程序中既可以直接使用常量值也可以使用常量。
下面我們來系統(tǒng)地認(rèn)識(shí)一下PHP的常量值,以及定義常量的方法。
2.1.1定義常量
通常將常量作為一個(gè)應(yīng)用程序的配置信息或保存為不變化的值,例如標(biāo)識(shí)位和參數(shù)配置信息等。PHP中通過define()函數(shù)實(shí)現(xiàn)常量的定義,基本語(yǔ)法如下:
define("CONSTANT_NAME",常量值[,boolcase_insensitive])
上述語(yǔ)法中包含3個(gè)參數(shù),具體說明如下。
●●CONSTANT_NAME表示常量名稱,默認(rèn)為大小寫敏感,一般是一個(gè)大寫字符串。常量名和其他任何PHP標(biāo)簽遵循同樣的命名規(guī)則,合法的常量名以字母或下劃線開始,后面跟著字母、數(shù)字或下劃線。
●●常量值常量的值可以定義為字符串、整型、浮點(diǎn)型或布爾型,不能定義資源類型的常量。如果定義為布爾型,則默認(rèn)為true。
●●case_insensitive這是一個(gè)可選參數(shù),將該參數(shù)的值設(shè)置為true時(shí),表示后面對(duì)此常量的引用將不區(qū)分大小寫。
【例2-1】
下面在PHP腳本中定義一些常量,這些常量有的合法,有的不合法。代碼如下:
define("APP_URL","www.baidu.com");//合法
define("DB_USER","admin");//合法
define("FOO","something");//合法
define("FOO2","中文");//合法
define("2FOO","中文");//不合法的變量名
define("_FOO_","something");//合法
上述代碼中,雖然最后一行自定義的常量是合法的,但是應(yīng)該避免這樣定義。因?yàn)镻HP中的魔術(shù)常量是以“_”開頭的,或許有一天PHP中會(huì)定義一個(gè)_FOO_魔術(shù)常量,這樣就會(huì)與上述定義產(chǎn)生沖突。
常量的定義非常簡(jiǎn)單,但是定義常量時(shí)還需要注意以下事項(xiàng):
●●常量前面沒有美元符號(hào)($)。
●●一旦定義常量,就不能重新定義或取消已定義的常量。
●●如果需要根據(jù)常量生成一個(gè)值,這個(gè)值必須存儲(chǔ)在另一個(gè)變量中。
●●常量是全局的,可以在腳本的任何位置引用。
2.1.2引用常量
常量定義完成后就可以引用了,引用常量時(shí)只需要使用它的名稱即可。
【例2-2】
下面使用PI作為計(jì)算的常數(shù)。首先通過define()定義名稱為PI的常量;接著輸出常量PI的值;然后將常量的值乘以100進(jìn)行計(jì)算;最后輸出執(zhí)行的結(jié)果。代碼如下:
define("PI",3.1415926);
echo"PI的值是:".PI;
$result=PI*100;
echo"\n計(jì)算PI乘以100的值:$result";
?>
由于常量在PHP中具有全局作用域,包含在函數(shù)和類中,因此可以用作一個(gè)標(biāo)識(shí)位,進(jìn)行布爾值驗(yàn)證。
【例2-3】
下面的示例演示了在布爾表達(dá)式中引用常量的值,代碼如下:
$error_code=2;
define("MY_ERROR",2);//定義常量MY_ERROR
if($error_code==MY_ERROR){//在表達(dá)式中使用MY_ERROR常量
echo"遇到了錯(cuò)誤";
}
?>
2.1.3const關(guān)鍵字
define()函數(shù)自定義的常量是全局的,它可以在腳本的任意位置使用。但是,如果要在PHP的類中定義一個(gè)常量,使用define()函數(shù)是錯(cuò)誤的,這時(shí)可以使用const關(guān)鍵字。使用const修飾的常量與define()函數(shù)一樣,一旦定義就不能在程序的任何地方進(jìn)行“人為”修改。而且,它定義的常量也需要遵循常量的命名規(guī)則。
【例2-4】
使用const關(guān)鍵字定義一個(gè)常量,并且在方法中引用該常量。代碼如下:
classTest{
constNAME=100;//在類中定義NAME常量
functionclassN(){
echoTest::NAME*312;
}
}
$t=newTest();
$t->classN();//輸出結(jié)果:31200
?>
上述代碼使用Test::NAME的方式訪問常量,其中Test表示類名,NAME表示定義的常量名。在PHP的類中,const變量可以使用parent::YOUCONST的方式或className::YOUCONST的方式在子類中訪問,YOUCONST表示常量名稱;const定義的常量,在子類中可以被覆蓋。const關(guān)鍵字和define()函數(shù)都可用于定義常量,但是一般情況下只使用后者,前者在類中使用頻繁,兩者的區(qū)別如下:
●●const用于類成員變量的定義,一經(jīng)定義,不可修改;define()函數(shù)不可用于類成員變量的定義,而用于全局常量。
●●const可以在類中使用;而define()函數(shù)則不能。
●●const不能在條件語(yǔ)句中定義常量。
●●const采用一個(gè)普通的常量名稱;define()可以采用表達(dá)式作為常量名稱。
●●const只能接受靜態(tài)的標(biāo)識(shí);而define()函數(shù)可以采用任何表達(dá)式。
●●const定義常量時(shí)大小寫敏感;而define()函數(shù)可通過參數(shù)設(shè)置來指定大小寫是否敏感。
2.1.4高手帶你做——認(rèn)識(shí)魔術(shù)常量
PHP為運(yùn)行時(shí)的腳本提供了大量的預(yù)定義常量,簡(jiǎn)稱系統(tǒng)常量。PHP除了有預(yù)定義變量外,還有比預(yù)定義變量更多的預(yù)定義常量。它們很多都是由擴(kuò)展庫(kù)定義的,只有在加載了這些擴(kuò)展庫(kù)時(shí)才會(huì)出現(xiàn),或者動(dòng)態(tài)加載后,或者在編譯時(shí)就已經(jīng)包括進(jìn)去了。
魔術(shù)常量保存著PHP腳本運(yùn)行時(shí)的狀態(tài),例如當(dāng)前腳本名稱和運(yùn)行的行號(hào)等內(nèi)容。PHP中包含多個(gè)魔術(shù)常量,其說明如表2-1所示。
……