版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
PHP完全自學手冊第1頁/共270頁1.1PHP及相關術語在閱讀技術文檔和相關學習資料時遇到專業(yè)術語,是學習編程語言時最困難的地方之一,在不了解相關專業(yè)術語的前提下,學習成了一件痛苦的事情。為了能順利的閱讀PHP學習資料和技術文檔,現(xiàn)列舉常用的與PHP有關的專業(yè)術語供讀者參考。第2頁/共270頁1.1.1軟件系統(tǒng)相關術語術語是了解一門語言和語言開發(fā)環(huán)境的基礎,本節(jié)就介紹PHP中常碰到的環(huán)境術語。(1)軟件開發(fā)環(huán)境(SDE)(2)什么是LAMP、WAMP?(3)什么是Apache?(4)什么是MySQL?(5)Eclipse(6)什么是SSL?(7)什么是模式?(8)什么是框架?(9)什么是MVC?(10)什么是模版?(11)什么是面向過程方法?(12)什么是面向對象方法?(13)什么是Socket?第3頁/共270頁1.1.2PHP語言相關術語PHP不光是一門語言,慢慢擴展成為一種行業(yè),本節(jié)介紹這門語言涉及的一些行業(yè)用語和技術詞匯。(1)什么是PHP?PHP是HypertextPreprocessor兩個英文單詞的縮寫,是基于服務器端運行的腳本程序語言,其可以實現(xiàn)數(shù)據(jù)庫和網(wǎng)頁之間的數(shù)據(jù)交互。PHP的獨特語法混合了C、Java、PERL和PHP式的新語法。PHP語言可以單獨運行,也可以鑲嵌在HTML文件中,這樣程序員就可以不必完全依賴HTML生成網(wǎng)頁。因為PHP語言的執(zhí)行都在服務器端,所以客戶端是看不到PHP代碼的。(2)什么是PHPer?PHPprogrammer,指編寫PHP的程序員。(3)什么是類?類是對某個對象的定義。它包含有關對象動作方式的信息,包括它的名稱、方法、屬性和事件。實際上它本身并不是對象,因為它不存在于內(nèi)存中。當引用類的代碼運行時,類的一個新的實例,即對象,就在內(nèi)存中創(chuàng)建了。雖然只有一個類,但能從這個類在內(nèi)存中創(chuàng)建多個相同類型的對象第4頁/共270頁1.1.2PHP語言相關術語(4)什么是對象?對象就是類存在于內(nèi)存中的實例,通過對類進行實例化,就能得到對應的對象。(5)什么是函數(shù)?函數(shù)是一段相對獨立的代碼,不同的語言有不同的定義方式。在PHP中,函數(shù)就是有效的PHP代碼的集合。在設計復雜程序時,可以把程序分為幾個函數(shù),不同的函數(shù)完成不同的功能。其優(yōu)點在于各部分充分獨立,不僅可以使程序易讀、易維護,還可以對代碼進行復用。(6)什么是Session?Session用中文來解釋就是會話期。一個會話期開始于用戶輸入一個站點的網(wǎng)址時,結束于離開這個站點時。PHP使用Session函數(shù)來創(chuàng)建和管理會話期內(nèi)“$_SESSION”中的變量。第5頁/共270頁1.1.2PHP語言相關術語(7)什么是Cookie?Cookie是一種在遠程瀏覽器端儲存數(shù)據(jù)并以此來跟蹤和識別用戶的機制。在PHP中可以用setcookie()函數(shù)來設置Cookie。Cookie是HTTP標頭的一部分,因此setcookie()函數(shù)必須在其他信息被輸出到瀏覽器前調(diào)用,這和對header()和SESSION函數(shù)的限制類似??梢允褂幂敵鼍彌_函數(shù)來延遲腳本的輸出,直到按需要設置好了所有的Cookie或者其他HTTP標頭。(8)什么是PEAR?PEAR是PHP的擴展和庫代碼的知識庫,而這個項目最有雄心的目標則是試圖定義一種標準,這種標準將幫助開發(fā)者編寫可移植、可重用的代碼。(9)什么是Pecl?Pecl是通過PEAR打包后,取得的PHP擴展庫。第6頁/共270頁1.1.2PHP語言相關術語(10)什么是變量?PHP中的變量用一個美元符號后面跟變量名來表示,數(shù)據(jù)存儲的內(nèi)存地址。在PHP中變量名是區(qū)分大小寫的。(11)什么是常量?常量,即不可變的數(shù)值或數(shù)據(jù)項。常量的值通常是在程序運行前定義的,在整個程序運行的過程中,其值是不會改變得。常量默認為大小寫敏感。按照慣例常量標識符總是大寫的。(12)什么是引用?在PHP中引用就是用不同的名字訪問同一個變量內(nèi)容。變量名和變量內(nèi)容是不一樣的,因此同樣的內(nèi)容可以有不同的名字。(13)什么是序列化?序列化就是將對象的狀態(tài)信息轉換為可以存儲、傳輸?shù)臄?shù)據(jù)的過程。在序列化期間,對象將其當前狀態(tài)寫入到臨時或持久性存儲區(qū)。再次使用時,可以通過從存儲區(qū)中讀取或反序列化對象的狀態(tài),重新創(chuàng)建該對象。序列化只保存了對象的成員數(shù)據(jù)而不包話方法。第7頁/共270頁1.1.2PHP語言相關術語(14)什么是構造函數(shù)?構造函數(shù)是類中的一個特殊函數(shù),當使用new操作符創(chuàng)建一個類的實例時,構造函數(shù)將會自動調(diào)用。在PHP5以前的版本中,當函數(shù)與類同名時,這個函數(shù)將成為構造函數(shù)。PHP5通過定義“__construct”函數(shù)來建立構造函數(shù)。如果一個類沒有構造函數(shù),則調(diào)用基類的構造函數(shù),如果有剛調(diào)用當前類構造函數(shù)。(15)什么是析構函數(shù)?PHP5引入了析構函數(shù)的概念,通過定義“__destruct”函數(shù)來建立析構函數(shù)。析構函數(shù)會在到某個對象的所有引用都被刪除或者當對象被顯式銷毀時執(zhí)行。專業(yè)術語的記憶有助手對新語言的學習,特別在遇到閱讀技術文檔時,能理解文檔里大量的專業(yè)術語,不僅能加快學習的進度,也能更準確的理解原文的意思。可以少走很多彎路。本節(jié)介紹的僅限于常用的術語,在PHP語言學習的過程中,應該多注意對PHP專業(yè)術語和其他通用專業(yè)術語的學習和集累。第8頁/共270頁1.2PHP的運行及開發(fā)環(huán)境在上一節(jié)中,提到了幾個術語,即:SDE、LAMP、WAMP和Eclipse。SDE,即軟件開發(fā)環(huán)境,它由軟件運行環(huán)境和軟件開發(fā)工具兩部分組成。LAMP和WAMP都是軟件的運行環(huán)境;Eclipse是本書使用到的開發(fā)工具。第9頁/共270頁1.2.1運行環(huán)境LAMP是指一組常用來搭建動態(tài)網(wǎng)站或者網(wǎng)絡服務器的軟件。這組軟件中包括Linux系統(tǒng)、網(wǎng)絡服務器APACHE、關系型數(shù)據(jù)庫MySQL和PHP或其他語言插件。LAMP之所以這么倍受推崇,是因為這個組合使用到的軟件都是開源軟件,而且它們之間的兼容性越來越高。隨著開源軟件的發(fā)展,LAMP已經(jīng)與J2EE及.NET形成三足鼎立之勢。LAMP的自家兄弟WAMP因為微軟的Windows系統(tǒng)被廣泛使用而名聲在外。在Windows系統(tǒng)中,常常使用的網(wǎng)絡服務器IIS,也可以用于構建PHP的運行環(huán)境。第10頁/共270頁1.2.2運行平臺的選擇這里指的運行平臺就是LAMP/WAMP中的L或W,即:Linux和Windows操作系統(tǒng)。選擇不同的平臺會真接影響到軟件開發(fā)中使用的工具,以及運行環(huán)境中其他軟件的安裝及配置。在大型的網(wǎng)站開發(fā)過程中,往往選擇LAMP的組合,其優(yōu)點不僅僅在于是開源軟件和兼容性,在穩(wěn)定性和安全性方面也有很好的表現(xiàn)。但是在平臺建設和維護方面的工具量相對也是很多的,這也是其缺點之一。WAMP作為一種可選擇的方案,其較短的部署時間,成為新手入門的首先。而且網(wǎng)絡上不斷推出的免配置版的WAMP更可以讓程序員從復雜的環(huán)境配置中解脫出來,專心于程序的開發(fā)。本書作為PHP入門教材,將選擇使用WAMP組合。運行環(huán)境的構建將是跨入PHP世界的重要一步。值得慶幸的是走出這一步并不難。免安裝、免配置版的WAMP已經(jīng)發(fā)展了很多版本,讀者可以很容易的從互聯(lián)網(wǎng)上取得。下面的三個章節(jié)將重點講解如何在已經(jīng)擁有Windows系統(tǒng)的電腦上安裝Apache、MySQL和PHP。第11頁/共270頁1.2.3Apache對客戶端與服務器端通信的作用本書1.1章節(jié)的中對Apache進行了名詞性的解釋,但讀者對其在整個開發(fā)環(huán)境中,能起到的作用還不是很了解。下邊列出的是一個簡單的客戶端與服務器通訊的步驟:(1)客戶端(瀏覽器)和網(wǎng)絡服務器建立TCP連接,連接建立以后,向網(wǎng)絡服務器發(fā)出訪問請求(如Get請求)。根據(jù)HTTP協(xié)議,該請求中包含了客戶端的IP地址、瀏覽器的類型和請求的URL等一系列信息。(2)網(wǎng)絡服務器收到請求后,將客戶端要求的頁面內(nèi)容返回到客戶端。如果出現(xiàn)錯誤,那么返回錯誤代碼。(3)斷開與遠端Web服務器的連接。上面的步驟中提到的網(wǎng)絡服務器,就是一臺安裝有Apache的電腦主機。負責處理客戶端請求的數(shù)據(jù),并返回客戶請求的內(nèi)容,這就是Apache的作用。第12頁/共270頁1.2.4準備工作從本節(jié)開始,學習建立一臺實現(xiàn)上述功能的主機。(1)一臺已經(jīng)安裝了WindowsXP/2000/2003系統(tǒng)的電腦。(關于Windows的安裝過程,請參照其他書籍)。本書使用是WindowsXP系統(tǒng)。(2)登錄Apache官方網(wǎng)站/,下載最新版本的安裝程序,本書中使用的是Apache2.2.6Released,詳細下載地址:/httpd/binaries/win32/apache_2.2.6-win32-x86-openssl-0.9.8e.msi。第13頁/共270頁1.2.5安裝Apache安裝Web服務器是實現(xiàn)通信功能的關鍵,本節(jié)詳細介紹如何安裝Apache。第14頁/共270頁1.2.6確認Apache安裝成功確認Apache安裝成功有很多方法,了解和掌握它們,會對網(wǎng)絡服務器維護有很大的幫助,下邊舉例說明常用的兩種方法。1.使用Apache自帶的管理軟件2.使用瀏覽器第15頁/共270頁1.2.7PHP安裝準備在最初的PHP安裝時,都會使用手工配置,但隨著PHP的發(fā)展,PHP版本也提供了安裝版,而且相對于Apache和MySQL的安裝來說,PHP的安裝簡單的多。按照下邊的步驟執(zhí)行,將會為Apache添加PHP的語言支持。下面是安裝前的準備工作。(1)登錄PHP的官方網(wǎng)站/,下載最新版的PHP語言安裝文件,本書使用的是PHP5.2.4,詳細下載地址:/get/php-5.2.4-win32-installer.msi/from//mirror(2)PHP官方網(wǎng)站提供了適用于不同操作系統(tǒng)的文件,在下載時請注意選擇正確的操作系統(tǒng)。(3)PHP分為安裝版與非安裝版兩個版本,請選擇需要的包進行下載,本書選擇的是安裝版。第16頁/共270頁1.2.8安裝PHP安裝PHP的詳細步驟如下所示。第17頁/共270頁1.2.9確認PHP安裝成功右擊“ApacheMonitor”圖標,彈出ApacheMonitor菜單,單擊“OpenApacheMonitor”菜單項,進入Apache服務管理器,在對話框中單擊“Stop”按鈕,等待Apache服務關閉后,再單擊“Start”按鈕啟動Apache服務,成功后Apache服務管理器的狀態(tài)欄會顯示:Apache/2.2.6(Win32)PHP/5.2.4,如圖所示。第18頁/共270頁1.2.10Apache與PHP的相關配置為了讓Apache支持PHP,PHP的安裝配置更改了Apache的配置文件。Apache的主配置文件“httpd.conf”位于Apache的安裝目錄下的conf文件夾內(nèi),如圖所示。使用記事本程序打開“httpd.conf”,拖動滾動條至文件下方,會看到配置文件最下方有4行關于PHP的配置代碼,如圖所示。第19頁/共270頁1.2.11開發(fā)工具開發(fā)工具是程序員使用最多的軟件,它的選擇與程序員的編程習慣和軟件開發(fā)環(huán)境有關。最初的PHP是沒有專門的開發(fā)工具的,但隨著PHP的商業(yè)化運作和開源軟件的發(fā)展,很多流行的IDE都添加了對PHP編碼的支持,其中有Adobe公司的Dreamweaver和大名鼎鼎的Eclipse。說到PHP的開發(fā)工具,就不能不提到ZendStudio,它是目前公認的最強大的PHP開發(fā)工具,這種集成軟件包括了用于編輯,調(diào)試,配置PHP程序所需要的客戶及服務器組件,具有工業(yè)標準的PHP開發(fā)環(huán)境,代碼完成引擎和功能齊全的調(diào)試器。EditPlus及其他流行的文本編輯工具都可以作為PHP的開發(fā)工具,但是在開發(fā)稍大一點的軟件系統(tǒng)時,這些工具就會受到很多限制。但是體積小,運行快的這個特點在調(diào)試程序時,還是很實用的。如果只是想更改程序的一條代碼,就要啟動功能齊全的IDE,顯然不合適,此時這類文本編輯軟件就排上用場了。第20頁/共270頁1.2.12Eclipse的下載、安裝及配置在上邊的章節(jié)中,講述了PHP相關的開發(fā)工具,在綜合了各種因素后,本書選擇Eclipse作為主要開發(fā)工具。下邊介紹Eclipse的安裝與配置。Eclipse的版本與插件版本之間的對應是有要求的,如果不兼容的版本之間對應,插件有可能不會啟動。為了解決這個問題,Eclipse官方網(wǎng)站提供了語言開發(fā)環(huán)境的打包下載,即把Eclipse和語言開發(fā)插件打包在一起,省去復雜的配置過程。第21頁/共270頁1.3第一個PHP程序在一切準備工作就緒后,就可以使用Eclipse編寫PHP程序,并在Apache里發(fā)布并運行了。編寫代碼、發(fā)布、運行這一過程很簡單,通過本節(jié)的學習,很快就會掌握。第22頁/共270頁1.3.1使用Eclipse編寫源程序編程語言的學習,不僅僅是對語言本身的熟悉,同時要對其周邊的知識,如:開發(fā)工具、調(diào)試工具、運行環(huán)境配置等各個方面都進行了解,打下堅實的基礎,才能更靈活、高效的運用這種語言工具。通過對上面幾個小節(jié)的學習,了解了PHP運行需要的環(huán)境和配置方法。在接下來的章節(jié)中,會詳細介紹PHP的語法,函數(shù),數(shù)據(jù)庫等知識。在開始學習這些知識以前,先了解怎么樣使用Eclipse新建PHP項目及編寫PHP程序。第23頁/共270頁1.3.2發(fā)布和運行PHP程序所謂的發(fā)布PHP程序,就是把已經(jīng)編寫完成的PHP代碼文件復制到Apache指定的文檔根目錄下。Apache默認的文檔根目錄,就是其安裝目錄下的htdocs文件夾。為了方便讀者發(fā)布程序,在運行Eclipse時,選擇的工作空間就是這個文件夾。在1.3.1章節(jié)中,Eclipse中新建的項目“l(fā)earn”,等同的操作就是在htdocs文件夾下新建一個名為“l(fā)earn”的文件夾。而新建文件hello.php,就是在learn文件夾下新建一個名為hello.php的PHP代碼文件。這兩個動作其實就是PHP程序的發(fā)布過程,動作完成后,hello.php已經(jīng)發(fā)布到了Apache的文檔根目錄里的learn文件夾下。接下來,就是運行這個PHP文件。運行PHP有三種方式:在命令行中運行,作為桌面程序運行,作為服務器端腳本運行。其中最經(jīng)常使用的就是作為服務器端腳本運行方式。第24頁/共270頁1.4常見問題第一章的內(nèi)容主要是介紹了計算機與PHP語言的相關術語,PHP的運行環(huán)境的安裝與配置及PHP開發(fā)工具的安裝與簡單使用。在本章的幾個知識點里,有幾個問題應該特別說明一下。第25頁/共270頁1.4.1Apache安裝常見問題Apache為電腦提供網(wǎng)絡服務,會以系統(tǒng)服務的形式存在,默認占用的80端口。如果在安裝Apache以前,Windows安裝了自帶網(wǎng)絡服務程序,即IIS或其他軟件占用了80端口,Apache在安裝完成后,網(wǎng)絡服務是不會啟動的。在遇到這種情況,有兩種解決方法。方法一:停止占用端口的軟件如果程序員的機器要運行ASP程序,很有可能安裝了IIS,而同時又使用Apache布屬PHP程序,那么后來安裝的Apache是不能正常運行的。這種情況下可以通過停止IIS服務或改變IIS的服務端口來解決問題。方法二:改變Apache的默認端口為了不影響現(xiàn)有的程序運行,可能通過改變Apache的默認端口來解決問題。第26頁/共270頁1.4.2MySQL安裝常見問題MySQL安裝時也會遇到端口沖突的問題,在默認端口3306被占用時,可以在安裝里嘗試使用其他端口進行安裝,具體步驟參見1.2.4小節(jié)的第15步。第27頁/共270頁1.4.3PHP安裝常見的問題為了減少PHP安裝過程中的錯誤,本書使用安裝程序進行安裝。在某些情況下,不能使用安裝程序安裝時,手動安裝最容易出現(xiàn)的錯誤在路徑問題上。由于手動安裝,PHP運行需要的某些文件在PHP配置文件中找不到路徑,就會引發(fā)錯誤。此類錯誤的解決方法,可以通過查找、修改PHP配置文件中關于路徑的設置來解決。在開始正式學習PHP語言之前,要對PHP配置文件中“register_globals”參數(shù)進行設置。其作用是:在設置為“on”時,程序中的變量將自動注冊為全局變量,在設置為“off”是關閉這項功能?!皉egister_globals”設置為“on”,是PHP程序中一個主要的安全隱患。要更改這項參數(shù)的設置,需要對PHP的配置文件進行編輯。第28頁/共270頁1.4.4關于Eclipse的問題為了省去復雜的中文化過程,本書使用的是英文版的Eclipse,在整個使用過程中,只是涉及了幾個簡單而且常用的英文單詞,相對于整個PHP語言的學習來說,沒有什么大的障礙。如果讀者希望使用中文版的Eclipse,可以下載3.2.X系列版本的Eclipse和相應版本的PDT進行配置。Eclipse的更新很快,為了節(jié)省讀者的時間,光盤中提供了Eclipse的壓縮包,通過解壓縮可以直接使用Eclipse程序。在實際應用中,運行環(huán)境和開發(fā)工具的使用都會產(chǎn)生很大小的問題,在這里就不一一列舉。如果讀者有什么疑問,可能通過論壇進行交流。第29頁/共270頁第2章語法在第1章的學習中,介紹了PHP運行平臺的選擇、安裝與配置。同時介紹了相關的PHP開發(fā)工具及其特點。通過學習這些知識,為PHP語言的學習打下了堅實的基礎。在下面章節(jié)的學習中,統(tǒng)一使用第一章中構建的PHP運行環(huán)境,以及開發(fā)工具來編寫PHP文件。每一項語言學習的第一步都是語法,可見其在語言學習中地位的重要性。語法的學習過程其實就是規(guī)則的學習過程。在熟練的掌握了要學習語言的規(guī)則后,才可以靈活的使用語言。PHP的語法相對其他編程語言來說,還是相對簡單的。在通過與流行編程語言的比較后,會發(fā)現(xiàn)大多數(shù)編程語言的語法都大同小異。這對有語言學習基礎的讀者來說,可以很快進入學習,同時也要注意區(qū)別細節(jié)部分,以防止錯誤代碼的產(chǎn)生。第30頁/共270頁2.1語法基礎每一種編程語言都有其特點,PHP對于初學者來說,入門很簡單,但是同時也會為專業(yè)的程序員提供高級特性。但無論簡單或高級編程,都是以語法為基礎的。本章節(jié)的學習重點就是語法。第31頁/共270頁2.1.1使用PHP輸出HTML通過前面章節(jié)的學習,了解了怎么樣編寫PHP程序,并使之運行的過程。本文提到的PHP文件是以“.php”為擴展名的文件。PHP代碼作為服務器腳本在后臺運行,運行后得出的數(shù)據(jù),通過PHP語言自帶的顯示函數(shù),輸出到瀏覽器內(nèi)。在PHP輸出HTML可以使用echo()或print()來實現(xiàn),代碼如下所示。<?php//使用echo()函數(shù)輸出數(shù)據(jù)echo"這是echo()函數(shù)輸出的結果";//使用echo()函數(shù)帶有括號的例子echo"這是echo()()函數(shù)帶有括號的例子";//使用print()函數(shù)輸出數(shù)據(jù)print"這是print()函數(shù)輸出的結果";//print()函數(shù)帶有括號的例子print("這是print()函數(shù)帶有括號的例子");?>第32頁/共270頁2.1.2使用顯示函數(shù)輸出HTML使用顯示函數(shù)輸出帶有HTML格式的內(nèi)容,代碼如清單所示。清單顯示函數(shù)輸出帶有HTML格式的內(nèi)容<?php$str1=‘輸出沒有格式的測試字符串’;$str2=‘<fontsize=”2”>輸出帶有HTML格式的測試字符串</font>‘;$str3=‘<fontsize=\’3\’>輸出帶有HTML格式的測試字符串</font>‘;echo$str1;echo‘<br><br>‘;echo$str2;print‘<br>‘;print$str3;?>第33頁/共270頁2.1.3使用開始符、結束符嵌套HTML使用開始符、結束符輸出HTML,演示代碼如下所示。<?php$var=1;if($var==1){?>測試的變量值等于1。<?php}else{?>測試的變量值不等于1。<?php}?>這種方法插入HTML比較簡單,不用顧慮單引號和雙引號嵌套的問題。其優(yōu)點在于,不容易產(chǎn)生錯誤,適用于在PHP里插入大段的HTML代碼,特別適用于過程編程方法。但是后期的代碼維護有一定的難度。特別是當HTML語句過長時,在編寫程序的邏輯代碼時容易產(chǎn)生錯誤。第34頁/共270頁2.1.4使用定界符顯示HTML使用定界符輸出HTML,演示代碼如清單所示。清單使用定界符輸出HTML的方法<?php//使用定界符為字符串賦值并輸出$str=<<<EOD<br><fontsize='2'>測試字符串</font><br><fontsize="3">測試字符串</font><br><fontsize='4'>測試字符串</font>EOD;echo$str;//為定界符定義使用的變量$name='愛因斯坦';$dicta="想象力比知識更重要,因為知識是有限的,而想象力概括著世界上的一切,推動著進步,并且是知識進化的源泉。";$size=5;echo<<<EOT<br><fontsize='$size'>{$name}說:“{$dicta}”</font>EOT;?>第35頁/共270頁2.1.5把PHP嵌入HTML在HTML里嵌入PHP代碼相對來說比較簡單,代碼如清單所示。清單把PHP嵌入HTML<!DOCTYPEhtmlPUBLIC"-//W3C//DTDHTML4.01Transitional//EN""/TR/html4/loose.dtd"><html><head><metahttp-equiv="Content-Type"content="text/html;charset=GB2312"><title>用戶交互頁面</title></head><body>本頁是PHP代碼測試頁,這一行是使用HTML代碼直接輸出.<br><?phpecho"使用PHP輸出的字符串.";?></body></html>第36頁/共270頁2.1.6PHP與JavaScript的交互JavaScript并不是新推出的腳本語言,但隨著AJAX技術的興起,這種在客戶端運行,不浪費服務器端的資源,能建立良好的用戶交互界面的腳本,得到了廣泛的應用。與此同時網(wǎng)絡編程語言與JavaScript變量的交換,也成了討論的焦點。PHP與JavaScript的交互大體可分為3種,即:使用PHP生成JavaScript,使用COOKIE進行數(shù)據(jù)交換,使用臨時文件進行數(shù)據(jù)交換。PHP生成JavaScript的方法,可以動態(tài)生成JavaScript,使得在服務器端的設置,通過客戶端的JavaScript表現(xiàn)出來,提升用戶體驗。在使用時應注意,PHP生成JavaScript腳本的語法,不用與JavaScript語法混合。使用COOKIE進行數(shù)據(jù)交換,可以在PHP與JavaScript腳本交換小數(shù)據(jù)量時使用。因為COOKIE與腳本代碼無關,PHP與JavaScript都可以設置和讀取COOKIE,使得兩種語言在交換數(shù)據(jù)里,變得很簡單。使用臨時文件進行數(shù)據(jù)交換,原理與使用COOKIE進行數(shù)據(jù)交換是一樣的,只不過臨時文件可以存取的數(shù)據(jù)量更大,樣式更豐富。但使用臨時文件往往需要更多的操作代碼。第37頁/共270頁2.1.7使用PHP生成JavaScript使用PHP生成JavaScript的方法很簡單,與PHP輸出HTML使用同樣的方法,在兩種語言嵌套時,應注意不要把語法混合,演示代碼如清單所示。清單使用PHP生成JavaScript<?php$var1="我是PHP變量";$var2="PHP";echo"<script>";echo"varjsVar='我是JavaScript變量';";echo"varphpVar='這是".$var2."與JavaScript組成的變量';";echo"alert(jsVar);";echo"alert('".$var1."');";echo"alert(phpVar);";echo"</script>";?>第38頁/共270頁2.1.8在PHP與JavaScript中使用COOKIE傳遞變量PHP與JavaScript都能訪問瀏覽器里的COOKIE,通過PHP與JavaScript的COOKIE函數(shù),可以輕松的進行交互,演示代碼如清單所示。(詳細內(nèi)容請對照本書)上面的代碼演示了怎么樣使PHP與JavaScript通過COOKIE進行數(shù)據(jù)交換。因為PHP在設置COOKIE時,會使用urlEncode對COOKIE的值進行編碼,而JavaScript在解析這種編碼方面還很困難,或者說是不可能。所以采用了“VBScript”腳本編寫的編碼解析函數(shù)來解決這個問題。使用COOKIE交互數(shù)據(jù),在PHP與JavaScript交換少量數(shù)據(jù)時比較常用到。第39頁/共270頁2.1.9使用臨時文件進行數(shù)據(jù)交換這種方法和使用COOKIE進行數(shù)據(jù)交換方法的原理著不多。只不過,使用臨時文件可以交換更大的數(shù)據(jù)量,可選擇性比較強。PHP的文件操作函數(shù),在權限允許的情況下,可以在服務器端創(chuàng)建、存儲和讀取文件。用于數(shù)據(jù)交換的文件也有比較多的格式選擇,例如通用的XML格式、JSON格式或使用自定義的格式。下面通過一段代碼,簡單演示PHP與JavaScript,使用XML文件進行數(shù)據(jù)交互的例子,演示代碼如清單所示。第40頁/共270頁2.1.10使用注釋在本章的示例代碼中,為了方便讀者閱讀代碼,使用了大量的注釋語句。大型的軟件系統(tǒng)開發(fā)時,代碼往往是成千上萬行,在這么多的代碼中,快速的閱讀代碼,并找到想要的內(nèi)容,這就是注釋最重要的作用。PHP注釋分為單行注釋和多行注釋,下面的代碼段,顯示的是幾種正確的注釋方法。<?phpecho‘此行采用單行注釋方法一’;//單行注釋放在語句后
//單行注釋放在語句前
echo‘此行采用單行注釋方法二’;/*多行注釋第一行多行注釋第二行*/echo‘多行注釋后的語句’;echo‘多行注釋放在語句后’;/**語句后的多行注釋*/echo‘命令行語句的注釋方式’;#命令處理器的單行注釋風格?>第41頁/共270頁2.2類型本節(jié)提到的類型是指變量的類型。不同類型的變量存儲的值的大小和形式都不一樣。而變量的類型通常不是由程序員設定的,是由PHP根據(jù)該變量使用的上下文在運行時決定的。PHP支持8種原始類型。4種標量類型:boolean(布爾型)、integer(整型)、float(浮點型,也作“double”)、string(字符串);兩種復合類型:array(數(shù)組)、object(對象);兩種特殊類型:resource(資源)、NULL。第42頁/共270頁2.2.1布爾型布爾型的英文名稱為:boolean。布爾型是最簡單的變量類型。其取值只有兩個:真和假,使用TRUE和FALSE表示。要想為變量指定一個布爾值,只需要為其指定關鍵字“TRUE”或“FALSE”,并且這兩個關鍵字不分大小寫。布爾型變量多用于流程控制,示例代碼如下所示。<?php$flag=true;//為變量設置值為TRUE;$run=FALSE;//為變量設置值為FALSE;$version=“1.2.3”;//使用字符串進行邏輯控制if($version=="1.2.3"){echo"當前版本是1.2.3<br>";}//使用布爾值進行邏輯控制if($flag==TRUE){echo"旗幟已經(jīng)升起。<br>";}else{echo“旗幟還沒有升起。<br>”;}//單獨使用布爾值進行邏輯控制if($run){echo"運行員已經(jīng)起跑。<br>";}?>第43頁/共270頁2.2.2布爾型的類型轉換在很多情況下,程序計算的結果會用來做邏輯運算,這時就需要把不是布爾值的變量轉換成布爾值。強制轉化布爾值,可以在變量前使用“(bool)”或“(boolean)”來實現(xiàn)。但是很多情況下不需要用強制轉換,因為當運算符、函數(shù)或者流程控制需要一個布爾型的參數(shù)時,該值會被自動轉換,這也是PHP語法的一個特色。但如果遇到強制轉換布爾值時,還是需要仔細檢查,以防程序出現(xiàn)錯誤。當轉換為布爾值時,以下值被認為是FALSE:整型值:0(零)。浮點型值:0.0(零)??瞻鬃址妥址骸?”。沒有成員變量的數(shù)組。特殊類型NULL(包括尚未設定的變量)。所有其他值都被認為是TRUE(包括任何資源)。第44頁/共270頁2.2.3整型整型的英文名稱為:integer。整型變量的值,使用集合表示就是Z={...,-2,-1,0,1,2,...}。也就是正整數(shù)、0與負整數(shù)中的任意一個數(shù)。整型值可以用十進制,十六進制或八進制符號指定,前面可以加上可選的符號“-”或者“+”,如果用八進制符號,數(shù)字前必須加上0(零),用十六進制符號數(shù)字前必須加上0x。下面演示部分整數(shù)使用整型來進行文字表達的方法,代碼如下所示。<?php$num1=1202;//采用十進制顯示的正整數(shù)$num2=0;//零$num3=-123;//負數(shù)的表示方法$num4=0130;//采用八進制顯示正整數(shù)(等于十進制的88)$num5=0x1B;//采用十六進制顯示正整數(shù)(等于十進制的27)?>第45頁/共270頁2.2.4整型的類型轉換在有些情況下,需要對整型數(shù)值進行強制類型轉換,或者根據(jù)上下文自動轉換。為了保證程序的正常運行,需要對轉換后的類型加以確認。下面介紹的是兩種整型自動轉換的例子。(1)當整型變量溢出時,變量類型會自動轉換成float也就是浮點型。如果給定的一個數(shù)或執(zhí)行運算得出的結果,超出了整型的范圍,就稱為溢出。在出現(xiàn)溢出后,PHP會自動轉換類型來保證數(shù)據(jù)的正確。下面演示的是分別使用十進制、十六進制表達整型變量正常及溢出的情況,第46頁/共270頁2.2.5浮點型浮點型的英文名稱為:float。中文名稱也可以稱為浮點數(shù)、雙精度數(shù)或實數(shù),可以用以下語法定義,定義代碼如下所示。<?php$number=3.14159;$number=2.3e5;$number=8E-11;?>浮點數(shù)的字長和平臺相關,通常最大值是1.8e308并具有14位十進制數(shù)字的精度。關于浮點數(shù)精度,要特別注意,在2.2.4小節(jié)中,將運行結果還沒有確定的表達式轉換為整型時,出現(xiàn)了精度的問題。簡單的十進制分數(shù)如0.1或0.7,不可能在不丟失精度的情況下轉換為內(nèi)部二進制的格式,這就會造成輸出結果的失真,如floor((0.1+0.7)*10)通常會返回7而不是8。雖然浮點數(shù)能表達的值比整型多,但也有其限制,如1除3后會產(chǎn)生無限小數(shù),就不可能使用浮點數(shù)表示了。所以不要相信浮點數(shù)結果精確到了最后一位,也不要比較兩個浮點數(shù)是否相等。如果確實需要更高的精度,應該使用任意精度數(shù)學函數(shù)或者gmp函數(shù)。第47頁/共270頁2.2.6浮點型的類型轉換浮點型的類型轉換比較簡單,字符串型轉換為浮點的方法,會在2.2.4小節(jié)中介紹。而其他類型的值轉換為浮點型時,應先將值轉換成整型,然后再轉換成浮點。第48頁/共270頁2.2.7字符串字符串的英文為:string。其值是一系列字符。其范圍在PHP中沒有強制限制,所以在操作字符串時,不用擔心其長度過長的問題。在上面的章節(jié)中,已經(jīng)接觸過字符的定義方法,總結一下,共分為3種:單引號、雙引號和定界符。(1)單引號:定義字符串的最簡單的方法是把字符用單引號(')括起來。如果在定義的字符串中出現(xiàn)單引號,就需要使用轉義操作符(\)進行轉義后,才能正常輸出。使用單引號定義的字符串中出現(xiàn)的變量和轉義序列不會被變量的值替代。(2)雙引號:使用雙引號(")括起字符,同樣可以定義字符串。與單引號定義字符串相同,如果在定義的字符串中出現(xiàn)了一個雙引號,就需要使用轉義操作符進行轉義。而在字符串中出現(xiàn)其他的特殊字符,可以對照表2-1進行轉義操作。(3)定界符:使用定界符定義字符串,在前邊的章節(jié)已經(jīng)使用過。第49頁/共270頁2.2.8字符串與雙引號在使用單引號和雙引號定義字符串時,在使用的時候會有不同的表現(xiàn),下面演示的是單引號與雙引號定義字符串的方法和轉義字符串的使用,代碼如清單所示。第50頁/共270頁2.2.9字符串與定界符定界符由開始標識符和結束標識符組成。開始標識符由“<<<”和一個標簽組成,與變量名稱在同一行內(nèi)。結束標識符就是開始標識符的標簽,單獨在一行上,而且結束標識符所在的行,除了分號之外,不能包含任何其他字符。而且在分號之前和之后,都不能有任何空格或制表符。如果破壞了這條規(guī)則,這個結束標識符則會被視為無效的,PHP會繼續(xù)尋找下去。在這種情況下找不到合適的結束標識符,將會導致腳本最后一行出現(xiàn)語法錯誤。定界符還有一件重要的規(guī)則,就是不能用定界符語法初始化類成員,只能使用上過兩種介紹的方法。以下是錯誤的演示,代碼如下所示。<?phpclasshuman{public$face=<<<EOT臉EOT;}?>第51頁/共270頁2.2.10簡單語法與復雜語法簡單語法比較通用和方便,其不僅能解析變量,還可以解析數(shù)組索引或者對象屬性。對于數(shù)組索引,右方括號(])標志著索引的結束。對象屬性和方法和簡單變量使用方法相同。定界符中,在輸入法為半角英文狀態(tài)下輸入的代碼中插入變量,可以使用簡單語法。對于比較復雜的情況,可以使用復雜語法。復雜語法可以用花括號括起一個表達式。不是因為語法復雜而稱其為復雜,而是因為用此方法可以包含復雜的表達式。復雜語法可以在字符串中包含任何值,包括表達式。在一個字符串中出現(xiàn)中文,那么可以使用復雜語法在字符串中添加變量,演示代碼如2.2.9小節(jié)中的清單所示。因為這種方法很少使用,,在此就不多做介紹。注意:這兩種方法只適用于雙引號或者定界符指定的字符串。第52頁/共270頁2.2.11字符串型的類型轉換可以用(string)標記或者strval()函數(shù)將一個值轉換為字符串。當使用echo()或者print()函數(shù)時,或者將一個變量值與一個字符串進行比較的時候,字符串的轉換會在表達式范圍內(nèi)自動完成。在類型自動轉換和強制轉換時,一定要注意轉換后變量的值。下面演示的是,在強制轉換各個類型為字符串時,產(chǎn)生的值的情況,代碼如下所示。第53頁/共270頁2.2.12數(shù)組數(shù)組是一組具有相同數(shù)據(jù)類型元素組成的一個有序圖。PHP中的圖是一種把values(值)映射到keys(鍵名)的類型。數(shù)組通過使用array()函數(shù)定義,其值使用“key=>value”的方式設置,多個值通過逗號分割。數(shù)組的定義,如以下代碼所示。<?php//為數(shù)組的值指定鍵名$one=array("yellow"=>"banana","red"=>"flower","3"=>"三","03"=>"叁");//直接為數(shù)組賦值$two=array(1,2,3,4,5,6,7,8,9);//帶有一個鍵名的數(shù)組$three=array(6=>"六","七","八","九","十");?>第54頁/共270頁2.2.13簡單的數(shù)組操作數(shù)組的簡單操作包括顯示、添加、修改和刪除,演示代碼如下所示。<?php//定義一個空數(shù)組$ages=array();//使用[]向數(shù)組中添加一個沒有鍵名的值$ages[]="十七";//使用[]向數(shù)組中添加一個有鍵名的值$ages["18"]="十八";$ages[19]="91";//顯示數(shù)組中的值echo$ages[19];//改變數(shù)組中的一個值$ages[19]="19";//刪除數(shù)組中的一個值unset($ages[19]);//刪除整個數(shù)組unset($ages);//自動生成一個數(shù)組并為其賦值$newages[]=20;$newages[]=21;?>第55頁/共270頁2.2.14遍歷數(shù)組遍歷數(shù)組,就是把數(shù)組中的值,通過某種方法一一展現(xiàn)。數(shù)組的應用,大多都要求對數(shù)組進行遍歷。遍歷數(shù)組的方法很多,在本書的2.8節(jié)中會有其他方法的介紹,本小節(jié)只介紹使用foreach()函數(shù)遍歷數(shù)組的方法,代碼如清單2.12所示。清單2.12遍歷數(shù)組<?PHP//創(chuàng)建一個數(shù)組$colors=array("紅","藍","綠","黃","紫","青","橙");//使用foreach遍歷數(shù)組,并取得鍵名與值foreach($colorsas$key=>$value){echo"值'{$value}'的鍵名是$key<br>";}//使用foreach遍歷數(shù)組,只取值foreach($colorsas$value){echo"沒有鍵名,只有值:{$value}<br>";}?>第56頁/共270頁2.2.15數(shù)組的類型轉換要把其他類型轉換為數(shù)組,可以使用(array)標記,各個類型在轉換后的數(shù)組會有所差別,代碼如清單所示。第57頁/共270頁2.2.16多維數(shù)組多維數(shù)組與數(shù)組的定義、操作方法都相同。通過演示代碼,可以了解多維數(shù)組的定義和操作過程,代碼如下所示。<?PHP//定義一個多維數(shù)組$more=array("numbers"=>array(1,2,3,4,5,6,7),"colors"=>array("紅","藍","綠","黃","紫","青","橙"));//遍歷一個多維數(shù)組foreach($moreas$arrays){foreach($arraysas$key=>$value){echo$value;}}//顯示多維數(shù)組的值echo$more["numbers"][5];echo$more["colors"][5];//刪除多維數(shù)組的值unset($more["numbers"][0]);?>第58頁/共270頁2.2.17對象在PHP中,要使用“new”把對象實例化到一個變量中,代碼如下所示。<?PHP//定義一個類classhuman{var$height=0;functionsetHeight(){$this->height=170;}}//初始化對象$newHuman=newhuman();//訪問對象屬性echo$newHuman->height;//訪問對象的方法$newHuman->setHeight();echo$newHuman->height;?>對象是通過實例化后的變量來操作的,關于對象與類的更多操作,可以參見本書的第3章。第59頁/共270頁2.2.18對象的類型轉換其他類型轉換為對象,可以使用(object)操作符實現(xiàn),代碼如清單所示。清單其他類型轉換為對象第60頁/共270頁2.2.19資源資源是一種特殊變量,其值是一個到外部資源的引用。通過專門的函數(shù),可以建立資源并對其進行訪問,能建立資源的函數(shù)很多,在本書的其他章節(jié)有所介紹,本小節(jié)使用fopen()函數(shù)來建立一個資源,代碼如下所示。<?PHP//建立一個資源$fp=fopen("peoples.xml","r");/***操作資源代碼**///顯示資源類型sechoget_resource_type($fp);//關閉一個資源fclose($fp);?>第61頁/共270頁2.2.20NULLNULL是一個特殊的值,在給變量賦與此值時,代表該變量沒有值。此類型唯一的,也是僅有的值就是NULL??梢酝ㄟ^is_null()函數(shù)來判斷當前變量,是否為NULL值,代碼如下所示。<?PHP//為一個變量賦值NULL$var=NULL;//測試變量是否為NULL值echois_null($var);//顯示1//為一個變量賦值空格$none="";//測試變量是否為NULL值echois_null($none);//測試沒有賦值的變量是否為NULL值echois_null($temp);//顯示1//刪除已有變量后測試是否為NULL值unset($none);echois_null($none);//顯示1?>第62頁/共270頁2.2.21變量類型之間的轉換關于類型的轉換,在講解類型的時候,已經(jīng)進行了介紹。在PHP中的變量,會根據(jù)上下文的判斷,自動設置變量的類型。強制轉換類型也可以使用以下操作符實現(xiàn)。(int)、(integer):轉換成整型;(bool)、(boolean):轉換成布爾型;(float)、(double)、(real):轉換成浮點型;(string):轉換成字符串;(array):轉換成數(shù)組;(object):轉換成對象;注意:強制轉換操作符的括號內(nèi)允許有空格和制表符的出現(xiàn)。第63頁/共270頁2.3變量程序運行時,會在內(nèi)存中存儲兩種形態(tài)的信息。經(jīng)過定義,在程序運行中不再改變的值,稱為常量;而根據(jù)各種條件,會發(fā)生變化的值稱為變量。PHP中的變量由“$”符號和變量名來表示。其引用的就是存儲該變量的內(nèi)存地址。第64頁/共270頁2.3.1命名規(guī)則變量的命名與PHP其他標簽遵守相同的規(guī)則,正確的變量名由“$”符號,后面跟隨以字母或下劃線開頭的,任意數(shù)量的字母、數(shù)字、下劃線。其中字母的范圍是小寫字母a-z和大寫字母A-Z,使用ASCII碼表示就是從127-255;下劃線是指“_”;數(shù)字是從0-9取值。通過下面的演示,說明一下變量的命名規(guī)則,代碼如下所示。<?php//合法變量名$age=12;//合法變量名$is12=12;//以字母開頭的合法變量$_12=12;//下劃線開頭的合法變量名$_十二=12;//下劃線開頭的合法變量名$is十二=12;//以字母開頭的合法變量//非法變量名$12=12;//使用數(shù)字開頭的非法變量名$十二=12;//使用其他符號開頭的非法變量名$1two=12;//使用數(shù)字開頭的非法變量名$*12=12;//使用其他符號開頭的非法變量名?>第65頁/共270頁2.3.2變量類型變量的基本類型有布爾型、整型、浮點型、字符串、數(shù)組五種,加上擴展的對象、資源、NULL3種,一共有8種變量類型可供選擇。PHP的變量類型,會根據(jù)程序運行的上下文自動改變。有例外的情況,也在上一節(jié)中進行了介紹。要特別注意的是,有些類型是不能強制轉換的,例如:資源。變量在使用前一般都經(jīng)過初始化,但是沒有經(jīng)過初始化的變量,在參與表達式的運算時,一定要注意其值的變化,下面代碼演示的是,各類型變量沒有初始化參與運算時的值的情況,第66頁/共270頁2.3.3變量范圍一個變量初始化后,其作用范圍就確定下來了。下面演示的是變量定義后的有效范圍,代碼如清單所示。清單在包含文件中定義變量<?php$action1="在打籃球";$action2="在唱歌";?>第67頁/共270頁2.3.4全局與超全局變量要想在函數(shù)內(nèi)部訪問外部變量,可以使用“global”關鍵字或訪問超全局變量來實現(xiàn),代碼如清單所示。第68頁/共270頁2.3.5靜態(tài)變量靜態(tài)變量屬于變量的一種。變量在程序執(zhí)行時,離開其作用域,其值將會改變或消失。而靜態(tài)變量恰恰相反,在程序執(zhí)行時,離開其作用域時,其值不會丟失。通過以下代碼,可以更清楚的了解這個過程,代碼如清單所示。第69頁/共270頁2.3.6可變變量在不確定一個變量的名稱時,可以使用可變變量,通過演示代碼,可以了解可變變量的設置和使用方法,代碼如清單所示。清單可變變量演示<?php//普通變量的定義方法$normal="18歲";//在普通變量前加上"$"符號,轉換為可變變量$$normal="男孩";//可變變量輸出測試echo"$normal${$normal}";?>第70頁/共270頁2.3.7外部變量在程序中定義或自動產(chǎn)生的變量稱為內(nèi)部變量。由HTML表單、URL或外部程序產(chǎn)生的變量稱為外部變量??梢酝ㄟ^預定義變量“$_REQUEST”、“$_POST”、“$_GET”獲取外部變量,代碼如清單所示。第71頁/共270頁2.4預定義變量預定義變量是由PHP預設的一組數(shù)組,其數(shù)據(jù)包括運行環(huán)境、用戶輸入數(shù)據(jù)等。因其作用范圍是全局生效,所以又稱為超全局變量或自動全局變量。第72頁/共270頁2.4.1服務器變量:$_SERVER服務器變量是由網(wǎng)絡服務器創(chuàng)建的數(shù)組,其內(nèi)容包括頭信息、路徑、腳本位置等。不同的網(wǎng)絡服務器提供的信息有所出入,本書以Apache服務器提供的作為標準。第73頁/共270頁2.4.2環(huán)境變量:$_ENV環(huán)境變量是預定義的一個數(shù)組,記錄著系統(tǒng)路徑等信息。使用print_r()函數(shù),可以查看具體的環(huán)境變量的數(shù)組成員。其數(shù)組成員主要包括:ALLUSERSPROFILE,BID,CommonProgramFiles,COMPUTERNAME,ComSpec,F(xiàn)P_NO_HOST_CHECK,NUMBER_OF_PROCESSORS,OS,Path,PATHEXT,PROCESSOR_ARCHITECTURE,PROCESSOR_IDENTIFIER,PROCESSOR_LEVEL,PROCESSOR_REVISION,ProgramFiles,SystemDrive,SystemRoot,TEMP,TMP,USERPROFILE,VS80COMNTOOLS,windir,AP_PARENT_PID。單獨訪問環(huán)境變量的數(shù)組成員,可以通過“$_ENV[‘成員變量名’]”的方式實現(xiàn),代碼如下所示。<?php//顯示運行腳本服務器的操作系統(tǒng)echo$_ENV[‘OS’];//輸出Windows_NT?>第74頁/共270頁2.4.3HTTPCookies變量:$_COOKIE使用PHP的COOKIE函數(shù)或其他程序產(chǎn)生的COOKIE值,都保存在“$_COOKIE”數(shù)組中,使用print_r()函數(shù),可以查看當前設置的COOKIE值的情況??梢酝ㄟ^“$_COOKIE[‘變量名’]”的方式訪問COOKIE值,演示代碼如下所示。<?php//設置一個COOKIE值setcookie("school","大學");//顯示設置好的COOKIE值echo$_COOKIE["school"];//顯示大學?>第75頁/共270頁2.4.4HTTPGET變量:$_GET通過URL提交的變量,或表單使用“GET”方法生成的變量,都會以數(shù)組的形式保存在$_GET變量中。使用print_r()函數(shù),可以查看當前$_GET變量值的情況。也可以通過“$_GET[‘變量名’]”的方式訪問單獨訪問$_GET中的變量值,演示代碼如下所示。<?php//顯示$_GET變量值echo$_GET["school"];?>其他語言也可以模擬GET方法,向PHP程序提交HTTPGET變量。第76頁/共270頁2.4.5HTTPPOST變量:$_POST單使用“POST”方法生成的變量,都會以數(shù)組的形式保存在$_POST變量中。使用print_r()函數(shù),可以查看當前$_POST變量值的情況。也可以通過“$_POST[‘變量名’]”的方式訪問單獨訪問$_POST中的變量值,演示代碼如下所示。<?php//顯示$_POST變量值echo$_POST["school"];?>其他語言也可以模擬POST方法,向PHP程序提交HTTPPOST變量。第77頁/共270頁2.4.6HTTP文件上傳變量:$_FILES由HTML表單生成的文件上傳變量,以數(shù)組的形式記錄了上傳文件的詳細信息,其數(shù)組成員包括上傳的文件名:name;文件類型:type;臨時文件名:tmp_name;錯誤信息代碼:error;文件大?。簊ize。下面介紹使用HTML表單,生成文件上傳變量的方法,要使表單產(chǎn)生文件變量,要滿足三個條件:HTML表單要使用POST方式傳遞數(shù)據(jù)。表單的“enctype”參數(shù)要設置為“multipart/form-data”。表單中包含一個文件選擇框。通過$_FILES變量獲取上傳文件相關信息后,就可以配合其他文件函數(shù)實現(xiàn)文件的上傳。第78頁/共270頁2.4.7Request變量:$_REQUEST作為超全局變量,$_REQUEST存儲了包括$_POST、$_GET、$_COOKIE變量在內(nèi)的數(shù)據(jù)。通過訪問$_REQUEST,也可以實現(xiàn)$_POST、$_GET、$_COOKIE變量的功能。雖然$_REQUEST在使用時比較方便,但是其提供的數(shù)據(jù)存在一定的危險性。比如一段程序使用$_REQUEST讀取$_COOKIE值時,那有心的訪客可以通過提供一個$_GET變量來模擬$_COOKIE值,從而取得一定的訪問權限。第79頁/共270頁2.4.8Session變量:$_SESSION由PHP的SESSION函數(shù)產(chǎn)生的數(shù)據(jù),都以超全局變量的方式,存放在$_SESSION變量中,使用print_r()函數(shù),可以查看當前設置的SESSION值的情況??梢酝ㄟ^“$_SESSION[‘變量名’]”的方式訪問SESSION值,演示代碼如下所示。<?phpsession_start();$school="大學";session_register("school");echo$_SESSION["school"];//輸出大學?>關于如何在PHP中創(chuàng)建和使用SESSION,本書的第6章有詳細介紹。第80頁/共270頁2.4.9Global變量:$GLOBALS$GLOBALS變量以數(shù)組的形式,記錄了所有已經(jīng)定義的全局變量,而變量名就是這個數(shù)組的索引。即然$GLOBALS記錄著所有的全局變量,那么理所當然的也可以訪問全局變量里的信息,下面介紹使用$GLOBALS訪問其他預見定義變量的方法,代碼如下所示。<?phpsession_start();$school="大學";session_register("school");echo$_SESSION["school"];//輸出大學////使用$GLOBALS顯示當前操作系統(tǒng)版本echo$GLOBALS["_ENV"]["OS"];//使用$GLOBALS訪問SESSION值echo$GLOBALS["_SESSION"]["school"];//輸出大學?>$GLOBALS把SESSION及其他全局變量,作為數(shù)組中的一員過行訪問。可以通過print_r()函數(shù),查看當前$GLOBALS存儲值的情況。第81頁/共270頁2.5常量常量的定義已經(jīng)在2.3節(jié)中進行了介紹。雖然在程序中,常量不被經(jīng)常使用,但程序中不變得一些參數(shù),如數(shù)據(jù)庫用戶和密碼等數(shù)據(jù),也是可以使用常量來存儲的。利用常量定義后不能更改的特性,還可以把其使用在程序運行安全方面。第82頁/共270頁2.5.1定義和使用常量常量使用define()函數(shù)進行定義,操作格式為:“define("常量名","常量值");”。常量的命名,以字母或下劃線開始,后邊跟隨其他任意字母、下劃線和數(shù)字。常量的名稱對大小寫敏感,按照慣例常量標識符總是大寫。下面分別演示正確的和錯誤的常量命名,代碼如下所示。<?php//合法的常量名define("FRONT_SET","OPEN");define("BACK_SET","close");define("_OPEN","YES");//非法的常量名define("2_SET","NO");define("*_SET","YES");?>第83頁/共270頁2.5.2預定義常量預定義常量也稱為魔術常量。預定義常量使用的方法雖然與常量相同,但是其值會根據(jù)使用的情況而產(chǎn)生變量。所以從嚴格意義上講,不能稱其為常量。經(jīng)常使用到的常量有五個,通過下面的代碼,來介紹其使用方法,代碼如清單所示。第84頁/共270頁2.6表達式與運算符在PHP中,所有有值的都可以稱為表達式。而表達式大部分都是由變量與運算符組成的。本節(jié)主要介紹表達式的組成形式和運算符的使用方法。第85頁/共270頁2.6.1表達式的組成根據(jù)表達式的定義,變量賦值,就是最簡的表達式,而復雜表達式的例子就是函數(shù)了。下面舉例說明一下表達式的各種形式,代碼如下所示。<?php$age=18;$age=$age++;$age=$age--;$age=$age+1;$age+=18;$age=0;$age?$age+10:$age+20;functionnumber(){return30;}?>表達式的形式有很多,產(chǎn)生的值也有很多可能,在使用的時候要注意表達式值的變化,才能正確的進行邏輯判斷,避免程序產(chǎn)生錯誤。第86頁/共270頁2.6.2運算符優(yōu)先級運算符指得是能返回一個值的結構。這個結構當然也包括能返回值的函數(shù)。但類似于echo()、print()、print_r()等函數(shù)不在此列。運行符包括一元運算符、二元運算符、三元運算符三種類型。一元運算符只能對一個數(shù)進行類似取反或加1的運算,二元運算符使用最多的。二元運算符在表達式的運算中,是根據(jù)運算符優(yōu)先級來計算的。三元運算符是的形式是:“表達式1?表達式2:表達式3”,其會根據(jù)第1個表達式,來選擇第2個或第3個表達式作為其本身的值,三元運算符在以后的章節(jié)中,會有詳細的介紹。運算符規(guī)則:先進行高優(yōu)先級運算符的計算,再進行低優(yōu)先級運算符的計算,如果運算符級別相同,按照從左到右的順序計算??梢允褂谩?)”符號來改變優(yōu)先級。第87頁/共270頁2.6.3算術運算符算術運算符包括6種最基本的運算加(+)、減(-)、乘(*)、除(/)、取模(%)、取反(-)。下面演示這6種運算符的使用方法,代碼如下所示。<?php$m=10;$n=3;$number=0;//加法$number=$m+$n;//減法$number=$m-$n;//乘法$number=$m*$n;//除法$number=$m/$n;//取模$number=$m%$n;//取反$number=-$m;?>第88頁/共270頁2.6.4賦值運算符顧名思義,賦值運算符的作用就是,把右邊表達式的值賦與左邊的表態(tài)式。其運算符號是“=”,及其他組合的符號“+=”、“-=”、“.=”等。賦值運算符使用的比較廣泛,下面演示賦值運算符的使用方法,代碼如下所示。<?php$m=3;$n=2;$number=$m+$n;$m+=5;$m-=2;$string="這是";$string.="賦值運算符";?>第89頁/共270頁2.6.5位運算符位運算可以操作整型和字符串兩種類型。其運算符包括:按位與(&)、按位或(|)、按位異或(^)、按位非(~)、左移(<<)、右移(>>),下面演示賦值運算符的使用方法,代碼如下所示。第90頁/共270頁2.6.6比較運算符比較運算符可以對兩個值進行比較,不管兩個值是否為同一類型。比較運算符包括:等于(==)、全等(===)、不等(!=)、不等(<>)、非全等(!==)、小與(<)、大于(>)、小于等于(<=)、大于等于(>=),下面演示比較運算符的使用方法,第91頁/共270頁2.6.7錯誤控制運算符在可以產(chǎn)生值的表達式前使用錯誤控制運算符,可以忽略因表達式運算錯誤而產(chǎn)生的錯誤信息。錯誤控制運算符是“@”,下面演示錯誤控制運算符的使用方法,代碼如下所示。<?php//忽略包含文件時產(chǎn)生的錯誤@include("inc.php");//忽略連接mysql數(shù)據(jù)庫出錯產(chǎn)生的錯誤信息$conn=@mysql_connect("localhost","username","password");//忽略打開文件產(chǎn)生的錯誤信息$fp=@fopen("user.xml","w");functiontest(){return10;}//忽略調(diào)用函數(shù)失敗產(chǎn)生的錯誤信息$number=@test();?>第92頁/共270頁2.6.8執(zhí)行運算符使用執(zhí)行運算符“``”,PHP將把運算符內(nèi)的字符作為外殼命令來執(zhí)行,其作用與shell_exec()函數(shù)相同。下面演示執(zhí)行運算符的使用方法,代碼如下所示。<?php$output=`dir`;echo"<pre>$output</pre>";?>注意:在安全模式激活或者關閉了shell_exec()的情況下,執(zhí)行運算符是無效的。第93頁/共270頁2.6.9遞增/遞減運算符遞增/遞減運算符主要是對整型進行操作,同時對字符也有效。其操作符包括:前加、后加、前減、后減。下面遞增/遞減運算符的使用方法,遞增/遞減運算符對布爾值沒有影響,遞減NULL值時也沒有效果,但是在遞增NULL值是,結果為是1。第94頁/共270頁2.6.10邏輯運算符邏輯運算符可以操作布爾型。其運算符包括:邏輯與(and)、邏輯與(&&)、邏輯或(||)、邏輯或(or)、邏輯異或(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 江西省南昌市2025-2026學年上學期期末八年級數(shù)學試卷(含答案)
- 文綜試卷及答案
- 微積分試題及答案
- 地產(chǎn)委托物業(yè)前期介入相關工作作業(yè)指導書
- 腹腔鏡培訓班理論考試試題
- 達人介紹教學
- 一年級數(shù)學上冊期中試卷及答案真題(三套)
- 解析卷-滬粵版八年級物理上冊第四章物質的形態(tài)及其變化章節(jié)測評試卷(含答案詳解版)
- 大壩混凝土施工技術操作要領
- 2026屆北京市石景山區(qū)高三上學期期末考試歷史試題(含答案)
- 河南豫能控股股份有限公司及所管企業(yè)2026屆校園招聘127人筆試模擬試題及答案解析
- 要謙虛不要驕傲課件
- 2026國家保安員資格考試題庫及參考答案【完整版】
- 微生物檢驗質控措施分析
- 2026年黑龍江農(nóng)業(yè)工程職業(yè)學院單招職業(yè)技能考試題庫及參考答案詳解1套
- 婦科腫瘤保留生育功能治療策略
- 宮頸癌病理課件
- 2025東航股份綜合管理部招聘筆試歷年參考題庫附帶答案詳解
- 渝22TS02 市政排水管道附屬設施標準圖集 DJBT50-159
- 新一代大學英語(第二版)綜合教程1(智慧版) 課件 B1U1 iExplore 1
- 淮安市2022-2023學年七年級上學期期末道德與法治試題【帶答案】
評論
0/150
提交評論