任何PHP腳本語言都是使用連續的語句創建的。一個語句可以是一個賦值語句,一個函數調用,一個循環,一個條件語句甚至一個不做任何事情的語句(一個空的語句)。語句經常使用分號(;)結尾。另外,利用卷支持可以把一組語句壓縮從而使語句可以被組成語句組。一個語句組是一個關於自身的申明。不同的語句類型將在本章被描述。 常量 PHP定義了一些常量提供給結構使它能夠在運行時定義更多的類型。常量和變量十分的類似,但是他們在語法上有些微的不同。 被預定義的常量是__FILE__ 和__LINE__,在處理他們時,會發現他們與文件名和行號相符合。請參考如下示例: Example 6-1. Using __FILE__ and __LINE__ //使用__FILE__ 和__LINE__ 您可以使用函數define() 和undefine()來定義其它的常量。 Example 6-2. Defining Constants //定義常量 表達式 表達式是PHP最重要的基石。在PHP中,您所寫的幾乎所有的內容都是表達式。最簡單同時也是最精確的定義一個表達式的方法是“任何內容都有它的值”。 立刻進入大腦的簡單例子是:常量和變量。當您輸入“$a = 5”,您就把值“5”賦給了變量“$a”,明顯的,獲得這個數值5,或者說’5’是一個值為5的表達式(在這個例子中,’5’是一個整數常量)。 賦值以後$a的值是5, 因此如果你這樣寫$b = $a,你它同$b = 5所表達的意思是一樣的.換句話說,$a是一個值為5的表達式.如果一切工作正常,這些將是所發生的一切. 再稍微復雜一點的表達式的例子是函數(function) .例如,考慮以下下面的函數: function foo () { return 5; } 假設你熟悉函數的概念(如果你不熟悉,看一下第四章),你可能假設$c=foo()從本質上說同$c=5是一致的,你是正確的.函數是以他們的返回值為值得表達式.既然foo()返回5,表達式’foo()’的值就是5。一般來說,函數不會僅僅返回一個態的值,他們一般都計算一些東西。 當然,PHP裡面的值不必須是整數,並且經常他們不是PHP支持三種標量類型的數值:整數,浮點數,和字符串。(標量值是不能被再分為更小部分的數值,例如它不能是數組)。php也支持兩種合成類型的數值:數組和對象。每一種數據類型都能被賦值給變量或者通過函數返回。 迄今為止,PHP/FI 2的用戶不應該感覺到任何改變。然而,PHP把表達式帶入了一個更深的層次,如同許多其它語言所作的一樣。PHP是一種面向表達式的語言,幾乎每一件事都是一個表達式.考慮一下我們已經處理過的表達式“$a=5”.可以非常容易的看出這裡包含了兩個值,常量’5’的值,和$a的值。$a的值也已經被更新成5。但是事實是這裡還有一個額外的值包含其中,並且這個值就是賦值語句本身.這個賦值語句本身計算所賦值的數值,在這個例子中是5。實際上,它意味著“$a=5”,不管他做什麼,是一個值為5的表達式。因此,一些像’$b=($a=5)’的表達式,實際上同’$a=5;$b=5’(分號代表表達式的結束)是一樣的.既然賦值語句被以從右到左的順序解析,你還可以這樣寫’$b=$a=5’。 另一個很好的表達式的例子是前和後遞增量的方向性.PHP/FI 2的用戶和許多其他語言的用戶也許對符號(variable(變量)++和variable--)非常熟悉.這些就是遞增和遞減符號.在PHP/FI 2中,語句’$a++’沒有任何值(不是一個表達式),並且因此你不能給它賦值或以任何方式來使用它.PHP通過發展這些表達式加強了遞增(increment)/遞減(decrement)的能力,像c語言中一樣.在PHP中,有兩種遞增形式-前遞增和後遞增.這兩種遞增本質上都是使變量加1,並且對變量的影響都是一樣的.他們的區別是遞增表達式本身的值.前遞增的形式是’++$variable(變量)’,計算遞增值(PHP 在讀出它的值之前遞增變量的值,因此叫前遞增)後遞增的形式是’$variable++’,在變量遞增前計算$variable的原始值(PHP先讀出變量的值,然後再遞增,因此叫後遞增). 表達式的最後一個例子我們將處理組合操作符賦值表達式.你已經知道了如果你想將變量$a的值加1,你可以簡單的寫成’$a++’或’++$a’.但是如果你想加的數值不只是1呢,例如3?你可以多次使用’$a++’,但是很明顯這樣不是一個有效的,簡潔的方式.通常的方法是這樣寫’$a=$a+3’. ’$a=$a+3’計算變量$a加3後的值,並且被重新賦值給了變量$a,最終的結果是變量$a的值加了3.在PHP中,如同像C一樣的其它一些語言,你可以用更簡短的方式來做這些.給變量$a的當前值加3可以寫’$a+=3’.這個表達式正確的意思是”讀出$a的值,加3,然後把它賦值給$a”.除了更加簡潔和簡略外,這樣的語句執行起來速度更快.表達式’$a+=3’的值,像一個正則賦值語句的值.是被賦予的值.注意它不是3,而是$a+3的組合的值(這是一個被賦給$a的值).任何二元操作符都可以被用來組合成復合賦值操作符.例如,’$a-=5’($a=$a-5),’$b*=7’($b乘以7),等等. 如果你沒有在其它語言中加過的話,你會認為下面的表達式看起來非常奇怪.這就是三元條件算子: $first ? $second : $third 如果第一個子表達式的值為真的話(非0),那麼他的第二個子表達式將被計算,並且這就是整個條件表達式的值.否則,第三個子表達式將被預算,結果作為整個條件表達式的值. 下面的例子可以幫助你大體上理解前,後遞增和表達式. function double($i) { return $i*2;} $b = $a = 5; /* 把5賦值$a和$b */ $c = $a++; /* 後遞增, 把$a的原始值(5)賦值給$c */ $e = $d = ++$b; /* 前遞增, 把經過遞增操作的$b的值(6)賦值給$e和$d */ /* 這時,$d和$e都等於(6) */ $f = double($d++); /* 把$d的原始值(6)加倍,然後賦值給$f.$f等於(12)*/ $g = double(++$e); /* 先把$e執行遞增操作,然後加倍, 2*7 = 14賦值給$g*/ $h = $g += 10; /* 首先,$g加10,並且最終結果是24.將這個值賦值給$h,並且$h最終的結果也是24.*/ 在本章的一開始,我們就說過”我們將描述各種類型的語句”.表達式可以成為語句,然而,並不是每一個表達式都是一個語句.既然這樣,一個語句具有’expr’’;’的形式,一個表達式加上一個分號.在’$b=$a=5;’中,$a=5是一個有效的表達式,但是他不能由他自己構成一個語句.但是’$b=$a=5;’卻是一個有效的語句. 最後一個值得提起的事情是一個表達式的值的真假.在很多事件中,主要在條件執行和循環中,你對表達式的確切的值並不感興趣,你僅僅對他是否以為著 TRUE(真)或FALSE(假)(PHP沒有專門的boolean類型).在PHP中計算表達式的真假的方式同perl非常相似.任何非零的數值都是TRUE,零是FALSE!注意負數也非零,所以也為真!空字符串和字符’0’為FALSE;所有其他字符串為TRUE.對於非標量的數值(數組或對象)-如果值沒有包含任何元素,則被認為為FALSE,否則為TRUE. PHP提供了一個完整而且強大的表達式工具,並且完全說明他已經超出了本手冊的范圍.關於表達式是什麼,你怎麼才能構造一個有效的表達市,上面的例子應該給了你一個很好的提示.貫穿這個手冊的其余部分,我們將用’expr’代表有效的PHP表達式. IF IF結構是任何語言中最重要的特性之一,PHP也包括了它。它允許進行條件判斷同時執行相應的程序段。PHP中IF語句的特性和C是十分類似的: if (expr) statement 在對該表達式片段的描述後,會判斷表達式的值是否為真。如果表達式的值為真,PHP會執行該語句,如果該值為假,那麼PHP將會跳過該語句。 接下來的例子中如果$a比$b大,那麼將顯示“a is bigger than b”。 if ($a > $b) print "a is bigger than b"; 通常的情況,是用戶希望使用不只一條語句被有條件的執行。當然,在這裡沒有必要對每一個語句使用IF條件判斷。用戶可以使用一組語句來實現這個功能。例如,如果$a比$b大,那麼下面的代碼將顯示“a is bigger than b”,同時將$a的值賦給$b。 if ($a > $b) { print "a is bigger than b"; $b = $a; } IF語句可以嵌套在另一個IF語句之中,利用這一點,用戶可以根據不同的情況執行程序中不同的部分。 ELSE 通常,可能在條件符合時希望運行某個語句,而在條件不符合時希望運行另一段程序。這就是ELSE語句的作用。ELSE擴展了IF語句的作用,當條件為假時,ELSE後面的語句將被執行。例如,接下來的程序段將在$a大於$b的時候顯示“a is bigger than b”,在其他的情況下顯示“a is NOT bigger than b”。 if ($a > $b) { print "a is bigger than b"; } else { print "a is NOT bigger than b"; } ELSE語句並不僅僅起到在IF表達式值為假的時候執行語句的作用,如果在它後面接上IF的話,就成為了ELSEIF語句,使用它可以進一步的分析假的情況(見下文)。 ELSEIF 正如它的名字所暗示的,ELSEIF是IF和ELSE的組合。和ELSE一樣它擴展了IF語句對FALSE(假)的處理。但是和ELSE不一樣的是,ELSEIF將已經為假的條件再進行一次判斷,並根據判斷的結果進行處理。例如,下列代碼在$a>$b的情況下將顯示“a is bigger than b”,當$a不大於$b的時候就再進行一次判斷,如果$a==$b,將顯示“a is equal to b”,如果$a<$b將顯示“a is smaller than b”。 if ($a > $b) { print "a is bigger than b"; } elseif ($a == $b) { print "a is equal to b"; } else { print "a is smaller than b"; } 在同一個IF語句中可以有多個ELSEIF語句。第一個ELSEIF表達式(if any)如果為真,那麼將被執行。在PHP3中,您也可以寫成“else if”(使用兩個詞)同時效果和使用“elseif”(一個詞)是一樣的。他們的語言僅僅有些微的不一樣(如果您熟悉C語言的話,您會發現這個不一樣和在C中類似)但是最終他們的結果是完全一樣的。 ELSEIF語句僅僅在IF語句或前一個ELSEIF的表達式為假,同時當前的ELSEIF語句表