官术网_书友最值得收藏!

2章 PHP語言基礎

視頻講解:1小時44分鐘

通過第1章的學習,相信讀者對PHP的概念和如何搭建PHP環境有了一個全面的了解,接下來將學習PHP的基礎知識。無論是初出茅廬的“菜鳥”,還是資歷深厚的“高手”,沒有扎實的基礎做后盾都是不行的。PHP的特點是易學、易用,但這并不代表隨隨便便就可以熟練掌握。隨著知識的深入,PHP會越來越難學,基礎的重要性也就越加明顯。掌握了基礎,就等于有了堅固的地基,才有可能“萬丈高樓平地起”。

學習摘要:

PHP標記風格

PHP注釋

PHP數據類型

PHP常量

PHP變量

PHP操作符

PHP表達式

PHP函數

2.1 PHP標記風格

視頻講解

PHP和其他幾種Web語言一樣,都是使用一對標記對將PHP代碼部分包含起來,以便和HTML代碼相區分。PHP一共支持4種標記風格,下面分別進行介紹。

1.XML風格

XML風格的標記是本書所使用的標記,也是推薦使用的標記,服務器不能禁用。該風格的標記在XML、XHTML中都可以使用。

2.腳本風格
3.簡短風格
4.ASP風格

說明

如果要使用簡短風格和ASP風格,需要在php.ini中對其進行配置,打開php.ini文件,將short_open_tag和asp_tags都設置為On,重啟Apache服務器即可。

2.2 PHP注釋的應用

視頻講解

注釋即代碼的解釋和說明,一般放到代碼的上方或代碼的尾部(放尾部時,代碼和注釋之間以Tab鍵進行分隔,以方便程序閱讀),用來說明代碼或函數的編寫人、用途、時間等。注釋不會影響到程序的執行,因為在執行時,注釋部分會被解釋器忽略不計。

PHP支持3種風格的程序注釋。

1.單行注釋(//)

這是一種來源于C++語法的注釋模式,可以寫在PHP語句的上方,也可以寫在后方。

寫在PHP語句上方:

寫在PHP語句后方:

2.多行注釋()

這是一種來源于C語言語法的注釋模式,可以分為塊注釋和文檔注釋。

塊注釋:

文檔注釋:

注意

多行注釋是不允許進行嵌套操作的。

3.#號風格的注釋(#)

注意

在單行注釋中的內容不要出現“?>”標志,因為解釋器會認為PHP腳本結束,而不去執行“?>”后面的代碼。例如:

運行結果如下:

這樣會出錯的!!!!!不會看到?>

2.3 PHP的數據類型

視頻講解

2.3.1 數據類型

PHP一共支持8種原始類型,包括4種標量類型,即integer(整型)、float/double(浮點型)、string(字符串型)和boolean(布爾型);兩種復合類型,即array(數組)和object(對象);兩種特殊類型,即resource(資源)與NULL(空)。數據類型及說明如表2.1所示。

表2.1 數據類型

【例2.01】 使用echo語句輸出個人信息,包括“姓名”“性別”“年齡”“身高”“體重”,代碼如下:(實例位置:資源包\源碼\02\2.01)

上述代碼中,包含的數據類型有字符串型、整型和浮點型,運行結果如圖2.1所示。

圖2.1 個人信息輸出結果

多學兩招

上述代碼中,“.”是字符串連接符,<br>是換行標簽,echo是PHP的輸出語句,將文本內容顯示在瀏覽器上。常用的輸出語句還有var_dump()函數和print_r()函數。

2.3.2 數據類型轉換

PHP是弱類型語言(或動態語言),不需要像C語言一樣在使用變量前必須先聲明變量的類型。在PHP中,變量的類型是由賦給它的值確定的。例如:

說明

代碼中“=”不是數學中的“等于”,它是賦值操作符,將“=”右邊的值賦給“=”左邊的變量。

上述代碼中,變量$var1為字符串類型,變量$var2為整型。雖然PHP不需要先聲明變量的類型,但有時仍然需要用到類型轉換。PHP中的類型轉換非常簡單,只需在變量前加上用括號括起來的類型名稱即可。允許轉換的類型如表2.2所示。

表2.2 類型強制轉換

注意

在進行類型轉換的過程中應該注意以下內容:轉換成布爾型時,null、0和未賦值的變量或數組會被轉換為false,其他的為true;轉換成整型時,布爾型的false轉換為0,true轉換為1,浮點型的小數部分被舍去,字符串型如果以數字開頭就截取到非數字位,否則輸出0。

類型轉換還可以通過settype()函數來完成,該函數可以將指定的變量轉換成指定的數據類型。

參數var為指定的變量,參數type為指定的類型,參數type有7個可選值,即boolean、float、integer、array、null、object和string。如果轉換成功,則返回true,否則返回false。

當字符串轉換為整型或浮點型時,如果字符串是以數字開頭的,就會先把數字部分轉換為整型,再舍去后面的字符串;如果數字中含有小數點,則會取到小數點前一位。

【例2.02】 使用兩種方法將指定的字符串進行類型轉換,并比較兩種方法之間的不同。代碼如下:(實例位置:資源包\源碼\02\2.02)

運行結果如圖2.2所示。

圖2.2類型轉換

可以看到,使用(int)能直接輸出轉換后的變量類型,并且原變量不發生任何變化。而使用settype()函數返回的是布爾值,也就是true,而原變量被改變了。在實際應用中,可根據情況自行選擇轉換方式。

2.3.3 檢測數據類型

PHP還內置了檢測數據類型的系列函數,可以對不同類型的數據進行檢測,判斷其是否屬于某個類型,如果符合則返回true,否則返回false。檢測數據類型的函數如表2.3所示。

表2.3 檢測數據類型

由于檢測數據類型的函數的功能和用法都是相同的,下面使用is_numeric()函數和is_null()函數來分別檢測變量中的數據是否是數字和變量是否為null,從而了解并掌握is系列函數的用法。代碼如下:

運行結果如下:

2.4 PHP常量

視頻講解

常量是一個簡單值的標識符(名字)。如同其名稱所暗示的,在腳本執行期間該值不能改變,常量默認為大小寫敏感。一個常量由英文字母、下畫線和數字組成,但數字不能作為首字符出現。傳統上常量標識符總是大寫的。

2.4.1 定義常量

在PHP中使用define()函數來定義常量,該函數的語法格式如下:

參數說明如下。

constant_name:必選參數,常量名稱,即標識符。

value:必選參數,常量的值。

case_sensitive:可選參數,指定是否大小寫敏感。設定為true時,表示不敏感。

定義完常量后,使用常量名可以直接獲取常量值。例如:

運行結果如下:

2.4.2 預定義常量

在PHP開發過程中,開發者們經常會使用一些通用的信息,PHP已經將這些信息定義為常量,而不需要開發者重新定義,這就是預定義常量。常用的預定義常量如表2.4所示。

表2.4 PHP的預定義常量

注意

__FILE__和__LINE__中的“__”是兩條下畫線,而不是一條“_”。

說明

表中以E_開頭的預定義常量,是PHP的錯誤調試部分。如需詳細了解,請參考error_ reporting()函數。

預定義常量與用戶自定義常量在使用上沒什么差別,直接獲取常量值。例如,下面使用預定義常量輸出PHP中的信息。代碼如下:

運行結果如下:

說明

根據每個用戶操作系統和軟件版本的不同,所得的結果也不一定相同。

2.5 PHP變量

視頻講解

把一個值賦給一個名字時,如把值"明日科技小助手"賦給$name,$name就稱為變量。在大多數編程語言中,都把這稱為“把值存儲在變量中”。在計算機內存中的某個位置,字符串序列"明日科技小助手" 已經存在。我們不需要準確地知道它們到底在哪里,只需要告訴PHP這個字符串序列的名字是$name,從現在開始就要通過這個名字來引用這個字符串序列。這個過程就像上門取快遞一樣,內存就像一個巨大的貨物架,在PHP中使用變量就像是給快遞盒子加標簽,如圖2.3所示。

圖2.3 貨物架中貼著標簽的快遞

顧客的快遞存放在貨物架上,上面附著寫有名字的標簽。當顧客來取快遞時,并不需要知道它們存放在這個大型貨架的哪個具體位置,只需要提供名字,快遞員就會把快遞交送到顧客手上。實際上,顧客的快遞可能并不在原先所放的位置,不過快遞員會記錄快遞的位置。要取回顧客的快遞,只需要提供顧客的名字。變量也一樣,我們不需要準確地知道信息存儲在內存中的哪個位置,只需要記住存儲變量時所用的名字,直接使用這個名字即可。

2.5.1 變量賦值及使用

和很多語言不同,在PHP中使用變量之前不需要聲明變量(PHP 4之前需要聲明變量),只需為變量賦值即可。PHP中的變量名稱用“$符號+標識符”表示。標識符由字母、數字或下畫線組成,并且不能以數字開頭。另外,變量名是區分大小寫的。

變量賦值,是指給變量一個具體的數據值,對于字符串和數字類型的變量,可以通過“=”來實現。格式如下:

對變量命名時,要遵循變量命名規則。例如,下面的變量命名是合法的:

下面的變量命名則是非法的:

除了直接賦值外,還有兩種方式可以為變量賦值,一種是變量間的賦值。變量間的賦值是指賦值后兩個變量使用各自的內存,互不干擾,代碼如下:

運行結果如下:

變量間的賦值就像是在網上買了一個商品后,一天后又下單買了相同的商品。這樣在快遞點就有兩個一樣的快遞,這兩個商品占用兩個不同的貨架位置,互不干擾。

另一種是引用賦值。從PHP 4開始,PHP引入了“引用賦值”的概念。引用的概念是,用不同的名字訪問同一個變量內容。當改變其中一個變量的值時,另一個也跟著發生變化。使用&符號來表示引用。例如,變量$j是變量$i的引用,當給變量$i賦值后,$j的值也會跟著發生變化。代碼如下:

運行結果如下:

引用賦值就像在填寫快遞信息時,為避免和別人重名被人誤取,于是在“收貨人”位置上寫了兩個名字,一個是真名,一個是筆名。盡管是兩個名字,但卻是同一個商品,占用同一個貨架。

注意

引用賦值和變量間的賦值的區別在于:變量間的賦值是將原變量內容復制下來,開辟一個新的內存空間來保存,而引用賦值則是給變量的內容再起一個名字。

2.5.2 預定義變量

PHP還提供了很多非常實用的預定義變量,通過這些預定義變量可以獲取到用戶會話、用戶操作系統的環境和本地操作系統的環境等信息。常用的預定義變量如表2.5所示。

表2.5 PHP的預定義變量

2.6 PHP操作符

視頻講解

“+”“-”“*”“/”都稱為操作符。這是因為它們會“操作”或處理放在符號兩邊的數字。“=”也是一個操作符,稱為賦值操作符,因為我們可以用它為一個變量賦值。操作符就是會對它兩邊的東西有影響或者有“操作”的符號。這種影響可能是賦值、檢查或者改變一個或多個這樣的東西。完成算術運算的“+”“-”“*”“/”都是操作符。PHP的操作符主要包括算術操作符、字符串操作符、賦值操作符、遞增或遞減操作符、邏輯操作符、比較操作符、條件操作符和位操作符,這里只介紹一些常用的操作符。

2.6.1 算術操作符

算術操作符是處理四則運算的符號,在數字的處理中應用得最多。PHP常用的算術操作符如表2.6所示。

表2.6 PHP常用的算術操作符

說明

在算術操作符中使用%求余,如果被除數($a)是負數,那么取得的結果也是一個負值。

【例2.03】 計算以80km/h的速度行駛200km需要花多長時間,答案為時/分的格式,如X小時Y分鐘。相應的公式(用文字表述)是“行駛時間等于距離除以速度”。代碼如下:(實例位置:資源包\源碼\02\2.03)

運行結果如圖2.4所示。

圖2.4 顯示花費時間

2.6.2 字符串操作符

字符串操作符只有一個,即英文的句號“.”。它將兩個字符串連接起來,結合成一個新的字符串。

例如,將"明日科技"和"有限公司"連接起來。代碼如下:

運行結果如下:

多學兩招

對于字符串型數據,既可以用單引號,也可以用雙引號。分別應用單引號和雙引號來輸出同一個變量,其輸出結果完全不同,雙引號輸出的是變量的值,而單引號輸出的是字符串"$i"。例如:

2.6.3 賦值操作符

賦值操作符是把基本賦值操作符“=”右邊的值賦給左邊的變量或者常量。PHP的賦值操作符如表2.7所示。

表2.7 PHP的賦值操作符

注意

混淆“=”和“==”是編程中最常見的錯誤之一。

2.6.4 遞增或遞減操作符

兩個加號“++”連接在一起,稱為遞增操作符。兩個減號“--”連接在一起,稱為遞減操作符。遞增或遞減操作符有兩種使用方法,一種是將操作符放在變量前面,即先將變量作加1或減1的運算后再將值賦給原變量,叫作前置遞增或遞減操作符,如圖2.5所示。

圖2.5 前置遞增操作符執行順序

另一種是將操作符放在變量后面,即先返回變量的當前值,然后變量的當前值作加1或減1的運算,叫作后置遞增或遞減操作符,如圖2.6所示。

圖2.6 后置遞增操作符執行順序

例如,定義兩個變量,將這兩個變量分別利用遞增和遞減操作符進行操作,并輸出結果。代碼如下:

運行結果如下:

2.6.5 邏輯操作符

邏輯操作符用來組合邏輯運算的結果,是程序設計中一組非常重要的操作符。PHP的邏輯操作符如表2.8所示。

表2.8 PHP的邏輯操作符

在邏輯判斷時,經常要使用邏輯操作符,在后續章節中會使用到邏輯操作符。

2.6.6 比較操作符

比較操作符就是對變量或表達式的結果進行大小、真假等比較,如果比較結果為真,則返回true,如果為假,則返回false。PHP的比較操作符如表2.9所示。

表2.9 PHP的比較操作符

其中,不太常見的就是===和!==。$a===$b,說明$a和$b不只是數值上相等,而且兩者的類型也一樣。例如,false和0,在判斷時,它們的關系是相等(==),但不是恒等(===)。

2.6.7 條件操作符(或三元操作符)

條件操作符(?:),也稱為三元操作符,用于根據一個表達式在另兩個表達式中選擇一個,而不是用來在兩個語句或者程序中選擇。條件操作符最好放在括號中使用。

例如,應用條件操作符實現一個簡單的判斷功能,如果正確則輸出“條件運算”,否則輸出“沒有該值”。代碼如下:

運行結果如下:

2.6.8 操作符的優先級

所謂操作符的優先級,是指在應用中哪一個操作符先計算,哪一個后計算,與數學的四則運算遵循的“先乘除,后加減”是一個道理。

PHP的操作符在運算中遵循的規則是:優先級高的運算先執行,優先級低的操作后執行,同一優先級的操作按照從左到右的順序進行。也可以像四則運算那樣使用小括號,括號內的運算最先進行。表2.10從高到低列出了操作符的優先級。同一行中的操作符具有相同優先級,此時它們的結合方向決定求值順序。

表2.10 操作符的優先級

這么多的級別,如果想都記住是不太現實的,也沒有必要。如果寫的表達式很復雜,而且包含了較多的操作符,不妨多使用括號,例如:

這樣就會減少出現邏輯錯誤的可能。

2.7 PHP的表達式

視頻講解

表達式是構成PHP程序語言的基本元素,也是PHP最重要的組成元素。最基本的表達式形式是常量和變量。例如,$m=20,即表示將值20賦給變量$m。表達式是PHP最重要的基石。簡單的表達式如以下代碼所示:

上述代碼是由兩個表達式組成的腳本,即$num=12和$a="word"。此外,還可以進行連續賦值,例如:

因為PHP賦值操作的順序是由右到左的,所以變量$b和$a都被賦值5。

在PHP的代碼中,使用分號“;”來區分表達式,表達式也可以包含在括號內。可以這樣理解:一個表達式再加上一個分號,就是一條PHP語句。

注意

在編寫程序時,應該注意表達式后面的分號“;”不要漏寫。

2.8 PHP函數

視頻講解

函數就是可以完成某個工作的代碼塊,它就像是小朋友搭房子用的積木一樣,可以反復地使用。在使用時,只需拿來即用,而不用考慮它的內部組成。PHP函數可以分為兩類,一類是內置函數,即PHP自身函數,只需要根據函數名調用即可。PHP備受歡迎的一個原因就是擁有大量的內置函數,包括字符串操作函數和數組操作函數等。例如,var_dump()函數就是輸出變量的函數。第二類是自定義函數,就是由用戶自己定義的,用來實現特定功能的函數。內置函數可以通過查閱PHP開發手冊來學習,下面講解自定義函數。

2.8.1 定義和調用函數

創建函數的基本語法格式如下:

參數說明如下。

function:為聲明自定義函數時必須使用到的關鍵字。

fun_name:為自定義函數的名稱。

$str1…$strn:為函數的參數。

fun_body:為自定義函數的主體,是功能實現部分。

當函數被定義好后,所要做的就是調用這個函數。調用函數的操作十分簡單,只需要引用函數名并賦予正確的參數即可完成函數的調用。

例如,定義了一個函數example(),計算傳入的參數的平方,然后連同表達式和結果全部輸出。代碼如下:

運行結果如下:

注意

如果定義了一個函數,但是從未調用這個函數,那么,這些代碼將永遠也不會執行。

2.8.2 在函數間傳遞參數

在調用函數時,有時需要向函數傳遞參數,如圖2.7所示。

圖2.7 函數傳遞參數

參數傳遞的方式有按值傳遞、按引用傳遞和默認參數3種。

1.按值傳遞方式

按值傳遞方式是最常用的參數傳遞方式,即將調用者括號內的值依次傳遞給函數括號內的值。從下面的例子中,驗證函數接收參數的順序。代碼如下:

運行結果如下:

2.按引用傳遞方式

按引用傳遞就是將參數的內存地址傳遞到函數中。這時,在函數內部的所有操作都會影響到調用者參數的值。引用傳遞方式就是傳值時在原基礎上加&號即可。

舉例說明按值傳遞和按引用傳遞的區別。

按值傳遞:張三和李四是同事,張三有一間獨立的辦公室,張三給李四建筑材料,李四也建造了一個跟張三一模一樣的辦公室,他們倆在各自辦公室辦公,彼此獨立。

按引用傳遞:由于公司工費緊張,將李四安排到張三的辦公室。二人各有一把鑰匙,共用辦公室的資源,張三和李四就會相互影響。

例如,下面的代碼中,在第一個參數前添加一個&號。代碼如下:

運行結果如下:

從運行結果可以看出,第一個參數$parameter1使用引用后,函數體內改變$parameter1的值,調用者的參數$number1也相應改變,而$number2和$number3的值則沒有改變。

3.默認參數(可選參數)

還有一種設置參數的方式,即可選參數。可以指定某個參數為可選參數,將可選參數放在參數列表末尾,并且給它指定一個默認值。

例如,使用可選參數實現一個簡單的價格計算功能,設置自定義函數values()的參數$tax為可選參數,其默認值為0。第一次調用該函數,并且給參數$tax賦值0.25,輸出價格;第二次調用該函數,不給參數$tax賦值,輸出價格。代碼如下:

運行結果如下:

注意

當使用默認參數時,默認參數必須放在非默認參數的右側,否則函數可能出錯。

2.8.3 從函數中返回值

我們已經知道,可以向函數發送信息(參數),不過函數還可以向調用者發回信息。從函數返回的值稱為結果(result)或返回值(return value)。函數將返回值傳遞給調用者的方式是使用關鍵字return。return將函數的值返回給函數的調用者,即將程序控制權返回到調用者的作用域。該過程如圖2.8所示。

圖2.8 函數返回值

【例2.04】 模擬淘寶購物車功能,并計算購物車中商品總價。購物車中有如下商品信息:蘋果手機單價5000元,購買數量2臺;聯想筆記本電腦單機8000元,購買數量10臺。操作步驟為:先定義一個函數,命名為total,該函數的作用是輸入物品的單價和數量,然后計算總金額,最后返回商品金額。代碼如下:(實例位置:資源包\源碼\02\2.04)

運行結果如下:

return語句只能返回一個參數,即只能返回一個值,不能一次返回多個。如果要返回多個結果,就要在函數中定義一個數組,將返回值存儲在數組中返回。

2.8.4 變量作用域

細心的讀者可能注意到,有些變量在函數之外,有些則在函數之內,它們必須在有效范圍內使用,如果變量超出有效范圍,則變量也就失去其意義了。變量的作用域如表2.11所示。

表2.11 變量作用域

在函數內部定義的變量,其作用域為所在函數,如果在函數外賦值,將被認為是完全不同的另一個變量。在退出聲明變量的函數時,該變量及相應的值就會被清除。

2.9 小結

本章主要介紹了PHP語言的基礎知識,包括數據類型、常量、變量、操作符、表達式和自定義函數,并詳細介紹了各種類型之間的轉換、系統預定義的常量和變量、操作符優先級和如何使用函數。基礎知識是一門語言的核心,希望初學者能靜下心來,牢牢掌握本章的知識,這樣對以后的學習和發展能起到事半功倍的效果。

2.10 實戰

2.10.1 輸出圓周率的近似值

實例位置:資源包\源碼\02\實戰\01

使用3種書寫方法(圓周率函數、傳統書寫格式和科學記數法)輸出圓周率的近似值,運行結果如圖2.9所示。

圖2.9 3種方法顯示圓周率

2.10.2 將華氏溫度轉化為攝氏溫度

實例位置:資源包\源碼\02\實戰\02

美國洛杉磯當前溫度為72華氏溫度(F),把溫度從華氏度轉換為攝氏度(C)。轉換公式是C=5/9×(F–32)。運行結果如圖2.10所示。

圖2.10 將華氏溫度轉化為攝氏溫度

主站蜘蛛池模板: 蓝田县| 武强县| 额济纳旗| 辽阳县| 甘谷县| 三明市| 襄汾县| 丹阳市| 清涧县| 泰来县| 吴川市| 天祝| 武城县| 南康市| 静宁县| 天气| 昌黎县| 婺源县| 个旧市| 忻州市| 成安县| 文水县| 柞水县| 横山县| 宜黄县| 专栏| 竹溪县| 惠安县| 香格里拉县| 玛多县| 泸溪县| 合川市| 锡林浩特市| 蒙城县| 台江县| 德保县| 定远县| 大厂| 耒阳市| 依兰县| 武乡县|