首頁 >後端開發 >php教程 >PHP學習寶典-第五章

PHP學習寶典-第五章

黄舟
黄舟原創
2016-12-23 09:44:56992瀏覽

第五章

語法、變數與輸出

本章重點

◆ 了解PHP程式碼的基本法則

◆ 在變數中儲存資訊

◆ 在Web網頁中顯示輸出PHP的基本語法,就是所有正規格式用法的PHP程式碼都要遵循的規則。我們也會介紹在PHP程式碼執行如何使用變數儲存和擷取訊息,最後則談到在使用者的瀏覽器視窗中顯示文字的最簡單方式。

PHP語法的寬鬆與彈性

關於PHP,首先要提到的就是它已努力做到盡可能的寬鬆與彈性了。根據要遵守的語法規則的嚴格程度,各程序語言之間的差異相當大。最好是有所選擇,因為這有助於確保編寫的程式碼是真正你所需要的。如果在編寫一個控制核子反應爐的程序,而且還忘記了指定一個變量,這樣的話,讓程序拒絕執行會比慢慢偏離原先的設計意圖是要好得多了。然而PHP的基本設計原則是處在另一種規格樣板上的,因為PHP本身是製作迅速而簡單的Web網頁工具,它重點在於讓設計師在正確使用的前提下用起來很方便,而不是讓程序做額外的多餘工作來指明程序代碼的含義。 PHP需要的程式碼很少,但卻能以最大努力表達程式碼的意思。這表示在其它語言中的某些語法的特性,諸如變數宣告和函數原型等,在PHP中是不需要的。

話說回來,PHP沒法子讀出你心中所想的,它還是必須由你來表達並且有一些些要遵循的語法規則。如果在瀏覽器視窗中看到了「parse error」,而不是原本打算製作出的Web網頁成果,這意味著編寫的程式碼在規則上已經犯到了PHP所不能容忍的程度。

HTML不是PHP

還有一個要記住的重要內容是,該語法只應該用在PHP內。因為PHP是嵌入在HTML中的,在這樣的檔案中,每一部分都會分別由PHP或HTML解譯,這要根據其中的PHP標記來區分。

PHP語法只在PHP內有效,因此我們假設在本章內容都是指在PHP模式中,也冰是說,大多數程式碼片段都假設被嵌入在HTML網頁是,並且由適當的標記來區分標示。

PHP有C語言的語法風格

第三個要了解的重點是,PHP算是很像C語言風格的一種程式語言。如果讀者已會C語言,那麼你在學習PHP上就很快了:如果這樣不行,再查閱一下手冊。本章的其餘部分是給另外一些還不了解C語言的人所寫的,如果你是C語言程式設計師,那麼可以快速翻一下這一章的標題就行了,另外也可以參考本書專門為C語言的程式設計師所準備的附錄,這樣可以節省你寶貴的時間。

PHP對半型空白不敏感

半型空白是程式設計師鍵入的在螢幕上空出的部分,包括空格(spacehar)、Tab字元和Enter鍵(行末的結束符號)等等。 PHP對這類空白並不敏感,但這並不意味著空格和此類的內容沒什麼重要性(事實上,它們對於分隔PHP語言中的“單字或詞”還是很重要的),不過在一行中有多少個空格符並無所謂,按一個空格符和很多這樣的字元還是一樣的。

例如,下面的把2+2的和指定給變數$four的每個PHP語法都是相等的

$four=2+2; //單一空格

$four =2+2 ;//空格與跳位鍵

$four =

2

+

2;//多行式

把Enter鍵的行結束符號做為空白是很方便使用的方式,因為這意味著不必確保語法一定位於單一行上,這樣在編寫程式上能方便很多。

PHP有時會區分大小寫

前面已經講到過PHP並不會過分吹毛求疵,讀者可能感到驚訝它有時還是會區分大小寫的(即區分英文字母大小寫之間的差別)。這一點尤其是在所有變數設定上要注意。如果在HTML頁中嵌入這樣的程式碼:

<?php

$capital=67;

Print(“Variable capital is $capital<BR>”);

Print(“Variable CaPiTaL is $ CaPiTaL<BR>”);

?>

輸出結果則是

Variable capital is 67

Variable CaPiTaL is

這是因為變數採用不同的大小寫,因此就分成二個不同的變數。 (令人聽見的是,在預設的除錯設定下,類似這樣的程式碼片段並不會產生PHP錯誤。請參考本章後面「未指定的變數」一節。)

另一方面, PHP與C語言不同的是,它的函數名稱並不會區分大小寫,基本語法結構(if、then、else和while等)也是如此。

記述語句是以分號做為結尾

以下是PHP中的一個典型的語句,它把字符串指定給了$greeting變量:

$greeting=“Welcome to PHP!”;

這個小節的其餘內容要介紹的是如何更小的組件來建構這樣的語句,以及介紹PHP直譯程序如何進行表示的求值運算(如果已很熟悉這些語句和表達式,可以跳過這些內容)。

PHP的最小構造算是不可分的標記(token),例如數字(3.14159)、字串(?tow?)、變數($tow) 、常數(TRUE)和構成PHP本身語法的特殊單字(if、else等),它們彼此之間的分隔靠的是空白和其它特殊字元(如圖括號和大括號)。

PHP中最複雜的構造是表達式,表達式是具有[值]的標記之任何組合。單一個數字是表達式,單一個變數也是表達式。簡單的表達式還可以組合起來構成更為複雜的表達式,通常是透過在表達式之間加上運算子(例如,2+(2+2)),或者把表達式當成函數呼叫的輸入(例如,pow(2*3,3*2))。帶兩個輸入的表達式數字當成輸入,這樣帶輸入的函數會將輸入放在函數名稱後的括號中,各輸入(稱為參數)之間會以逗號分隔。

表達式求值運算

無論何時PHP直譯器在程式碼中遇到表達式,這個表達式都全被立即進行評估求值。這意謂PHP從表達式最小元素的值開始計算,然後繼續組合這些由運算子或函數連接在一起的值,直到產生表達式的整個值。舉例說明,求什判斷過程中的各步驟在想像中應該如下所示:

$result=2*2+3*3+5;

(=4+3*3+5)//想像的估算過程

(=4+9+5)

(=13+5)

(=18)

結果會在$result變數中儲存了數字18。


優先權、結合性和評算求值的順序

在PHP表達式評算求值中可能有兩類問題:如果對子表達式進行組合或結合,評算求值的順序是什麼?例如,在剛顯示的評算求值過程中,乘法比加法的結合性更高更緊密一點,這對最終結果是有影響的。

運算了結合表達式的特定方式稱為優先級規則,高優先級的運算子會先取得其它周圍的表達式來進行運算。如果需要,請記住這些規則,例如[*]總是比[+]的優先順序高(後續各章中會詳細講解這些規則)。或使用這條首要規則來判斷:在不確定的時候,使用圓括號把表達式結合在一起。

例如:

$resultl=2+3*4+5//結果是19

$result2=(2+3)*(4+5)//結果是45

運算子優先權規則會拿掉關於表達式如何結合的模稜兩可性,但當運算子具有相同的優先權時又會如何呢?以下機的表達式為例想想:

$how_much=3.0/4.0/5.0;

這個表達式等於0.15還是等於3.75將取決於哪個除法運算子先處理數字4.0。在線上說明中有個詳盡的結合性規則列表,但最要記住的規則就是結合性通常是從左到右的順序,也就是說,上面的表達式評算求值的結果為0.15,因為兩個除法運算子中靠左邊的那個具有優先權。

最後的問題的評算求值的順序,它和結合性並不同一回事。舉例來說,下面的算術表達式:

3*4+5*6

我們知道乘法應該發生在加法之前,但這並不等於知道了PHP會先執和行哪個乘法運算。一般來說,使用者無須關心求值次序,因為絕大多數情況下這對結果並沒有什麼影響。我們可以建造一些古怪的例子,讓結果與求值次序有關,通常這是因為對表達式其它部分中進行了子表達式的指定。例如,

$hun=($this=$that+5)+($that+$this+3);//不良例子

但是請你不要這樣寫,好嗎。 PHP可能設有…依賴它,我們將不會告訴你它的結果(依賴由左向右求值次序的唯一合理應用是在Boolean表達式的“簡短路徑”方式中,我們將會在第七章進行講解)。

表達式與型別

通常程序设计师会很小心地配合表达式的类型和将它们组合在一起的运算子或函式。常见的表达式是数学的表达式(用数学运算子结合数字)、Boolean表达式(用and或or结合true或false的语句)或字符串连算式(用运算子和函式来建构字符串)。与PHP的其余部分一样,对类型的处理会很宽松。例如,下面有表达式范例,很明显地它将两个运算试很不恰当地混合在一起使用了:

2 + 2 * ?nonsense? + TRUE

这个表达式不会产生错误,而是求值为数字「3」(你可以暂时把这个范例当作猜谜,下一章将解释为什么会出现这样的结果)。

指定表达式

最常见的表达式类型是指(assignment),在表达式中,把一个变数设置为等于某表达式的评算求值结果。表达式的形式是,先有一个变量名(是以「$」开头),后面是一个等号,然后是要评算求值的表达式。例如,

$eight=2 * (2 * 2)

$eight」将按照所我们所希望的方式被指定。

有一件要记住的重要事项是,指定表达式也是一种表达式,因此它们本身是有「值」的!运算工指定的对象无论是变量或值都是相同的。这意谓着可以在更复杂的表达式中间使用表达式。如果对下面的表达式求值:

$ten=($two = 2)+($eight = (2 * 2))

每个变量都将被指定为等于其名称的数值。

总而言之,PHP中的叙述语句(statement)可以是最后带带着分号(;)的任何表达式。如果把表达式看成是词组,则叙述语句则算是「整个句子」了,分号就算是句子结尾处的句号。任何括在PHP标记内有效PHP叙述语句都算是PHP的有效程序代码。

使用表达式和语句的理由

通常只有两个理由需要在PHP中编写表达式:为了取得它的值(value),或者为了取得次作用(side effect)。表达式的值传递给包含它的更复杂表达式;而次作用是除求值结果以外发生的任何事情。最典型的次作用包括指定或更改变量,在使用者屏幕是显示某些内容,或者对程序环境的一些其它持久性改变(诸如与数据库的互动)。

仅管叙述语句是表达式,但它们本身不能包含在更复杂的表达式中,这意味着使用叙述语句的唯一理由就是它的「次作用」!这也意味着可以编者编写一些合法但完全无用的语句,例如下面的第二条语句:

Print(“Hello”);//副加效应为输出显示至屏幕

2 * 3 + 4;//无用,没有效应产生

$value_num= 3 * 4 + 5;//副加效应为指定

Store_in_database(49.5);//副加效应到数据库

大括号的使用

虽然叙述句不能像表达式那样合并,但可以在能够使用语句的位置放入一串语句,把它们括在大括号中即可。

例如,PHP中的if结构有个测试条件(在圆括号中),条件后面是如果判断结果为真则应该执行的语句。如果在判断为真时要执行多条语句,可以使用大括号括住的这一堆叙述语句。下面的二个if程序代码段是相等的(都是判断一个恒真的叙述并印出相同讯息):

if(3==2+1)

print(“Good – I haven′t totally lost my mind.<BR>”);

if(3 ==2+1)

{

Print(“Good – I haven′t totally ”);

Print(“lost my mind.<BR>”);

}

在大括号包围住的中央可放置任何语句,其中包括本身带有大括号区块的if叙述。这表示if语句可包含另一个if叙述,这种巢状嵌套可依需要套入任意层。

注释

注释是程序的一部分,就是我们人类用来解释说明程序而使用,目的是帮助说明解释程序代码。程序执行器对程序代码做的第一件事情就是剔除注释,因此注释对程序的功能没有任何作用。但它对于帮助其它人在阅读程序代码时,更能理解原设计者在编写程序时的想法,因此注释也可算是无价的,即使就是程序设计师自己编写了一段时间之后,再回头看自己的程序也是如此。

PHP算是从几种不同程序设计语言(包括C、Perl和UNIX的shell script)获取灵感。因而PHP支持所有这些语言的注释风格,并且这些风格可在PHP程序代码中自由混合使用。

属于C语言风格的多行注释

多行的注释风格和C中的相同:注释从字符对「/*」开始,以字符对「*/」当作结束。例如:

* This is

A comment in

PHP */

关于多行注释,要记住的最重要一点是,注释不能巢状嵌套方式编写。不能在一个注释内放另一个注释。如果试图这样做,注释将在第一个「*/」字符对后结束,原本要作为注释的其余部分将被解释为程序代码,可能会导致错误的结果。例如:

/* This comment will /* fail horribly on the

Last word of this */sentence

*/

这是一种很容易造成的无心错误,通常发生在试图「注释」一段已经有注释语言的程序时,是常遇到的,请读者小心。

单行注释:「#」和「//」

除了/*…*/这种多行注释之外,PHP还支持两种在给单行使用的不同注释方式,一种是从C和Java继承来的,另一种是则后Perl和shell script继承来的。Shell script风格的注释以「#」符号开始,而C++风格的注释以双斜线「//」开始。这两种方法都会将加注的该行叙述的剩余部分当成注释对待,如下所示的范例:

# This is a comment ,and

# this is the second line of the comment

//This is a comment too.Each style comments only

//one line so the last word of this sentence will fail horribly.

非常机灵的读者认为单行注释与我们前面所介绍到的空白不敏感性并不相容。这是对的,如果采用单行注释并用Enter行结束符号替换了其中一个空格,结果全是不同的。以更精确的讲法是,PHP在从程序代码中剔除了注释后,程序代码才是对空白不敏感的。

变数

在PHP程序中间储存信息的主要方式是透过使用「变量」,这是取一个名称然后保存发后要使用的任意值的方式。

关于PHP中的变量,以下有几点正是要注意知道(后面会有更详细的讲解):

◆ PHP中的所有变量都要在最前面加上「$」符号标示。

◆ 变数中的值是它最近被指定的值。

◆ 变量用「=」运算子进行指定,变量在左边,要评算求值的表达式在右边。

◆ 变量不需用要在指定之前进行宣告。

◆ 除了目前值的型别之外,变量没有固有的型别。

◆ 指定前就被使用的变量有其默认值。

 以上就是PHP学习宝典-第五章的内容,更多相关内容请关注PHP中文网(www.php.cn)!


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn