PHP學習寶典-第五章

來源:互聯網
上載者:User
第五章

文法、變數和輸出

本章重點

◆ 瞭解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 isA comment inPHP */

關於多行注釋,要記住的最重要一點是,注釋不能巢狀嵌套方式編寫。不能在一個注釋內放另一個注釋。如果試圖這樣做,注釋將在第一個「*/」字元對後結束,原本要作為注釋的其餘部分將被解釋為程式碼,可能會導致錯誤的結果。例如:

/* This comment will /* fail horribly on theLast 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學習寶典-第五章的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.