1. 赋值运算
<?php
$a = 3;
$a += 5; // sets $a to 8, as if we had said: $a = $a + 5;
$b = "Hello ";
$b .= "There!"; // sets $b to "Hello There!", just like $b = $b . "There!";
?>
注意赋值运算
将原变量的值拷贝到新变量中(传值赋值),所以改变其中一个并不影响另一个。这也适合于在很密集的循环中拷贝一些值例如大数组。自 PHP 4 起支持引用赋值,用 $var = &$othervar; 语法,但在 PHP 3 中不可能这样做。引用赋值意味着两个变量都指向同一个数据,没有任何数据的拷贝。
2. 比較特殊的是三元運算子 ? :,以下例來解釋
(expr1) ? (expr2) : (expr3);
若 expr1 的運算結果為 true,則執行 expr2;否則執行 expr3。實際上它有點類以 if...else 迴圈,但可以讓程式較精簡有效率。
3. 流程控制
由於 PHP 的大部份語法都是承襲了 C 語言的語法,因此,在流程控制方面,也是有著和 C 語言極類似的迴圈。PHP 的迴圈不像 ASP 般可以使用 goto 的 BASIC 語法,
PHP 是結構化的程式語言,流程的設計上有一定的規定,而不能用 BASIC 的觀念來亂跳到別的區段中。
PHP 的語法沒有像 C 語言的 main(){} 區段,其實整個 PHP 主頁面 (就是瀏覽器輸入的 URL) 就是 main(){} 區段,這點和其它的解譯程式,如 Prel、Python、Shell Script 倒是很像。
在流程的區段分隔符號上,都是使用 { 當作區段的開頭,用 } 當作結尾,和 C 語言相同。不過 C 可以定義 begin 當開頭、end 當結尾 (像 Pascal),而 PHP 中不能做這種特殊的定義。
而
PHP 語法中在每道指令結束時都要加上分號 ;,但是在區段結尾符號 } 後面不用加上分號結束。4. 第三種就是巢狀的 if..else 迴圈,通常用在多種決策判斷時。它將數個 if..else 拿來合併運用處理。
直接看下面的例子
<?php
if ($a > $b) {
echo "a 比 b 大";
} elseif ($a == $b) {
echo "a 等於 b";
} else {
echo "a 比 b 小";
}
?>
實際要使用這種巢狀 if..else 迴圈時,請小心使用,因為
太多層的迴圈容易使設計的邏輯出問題,或者少打了大括號等,都會造成程式出現莫名其妙的問題。
5. while 可以不用大括號來包住執行區段,而使用冒號加上 endwhile。見下例
<?php
$i = 1;
while ($i <= 10):
print $i++;
echo ". 以後不敢了<br>\n";
endwhile;
?>
另外一種
do..while 迴圈則先執行,再判斷是否要繼續執行,也就是說迴圈至少執行一次,有點像是先斬後奏的方法。這種的迴圈,和單用 while 是不同的 (單用
while 是先判斷再處理)。若讀者熟 Pascal 語言的話,會發現 do..while 迴圈像是 Pascal 的 repeat..until 迴圈。
do..whilte 的語法如下
do {
statement
} while (expr);
6. 若循环有初始值,且都要累加(或累減),則使用 for 循环比用 while 循环好。例如將資料從資料庫取出
7. PHP 4 引入了 foreach 结构,和 Perl 以及其他语言很像。这只是
一种遍历数组简便方法。foreach
仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误。有两种语法,第二种比较次要但却是第一种的有用的扩展。
foreach (array_expression as $value)
statement
foreach (array_expression as $key => $value)
statement
第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。
第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量 $key。
foreach
不支持用“@”来抑制错误信息的能力。
8. switch 语句和具有同样表达式的一系列的 IF 语句相似。很多场合下需要把同一个变量(或表达式)与很多不同的值比较,并根据它等于哪个值来执行不同的代码。这正是 switch 语句的用途。
注: 注意和其它语言不同,continue 语句作用到 switch 上的作用类似于 break。如果在循环中有一个 switch 并希望 continue 到外层循环中的下一个轮回,用 continue 2。
为避免错误,理解 switch 是怎样执行的非常重要。switch 语句一行接一行地执行(实际上是语句接语句)。开始时没有代码被执行。
仅当一个 case 语句中的值和 switch 表达式的值匹配时 PHP 才开始执行语句,直到 switch 的程序段结束或者遇到第一个 break 语句为止。如果不在 case 的语句段最后写上 break 的话,PHP 将继续执行下一个 case 中的语句段
在 switch 语句中条件只求值一次并用来和每个 case 语句比较。在 elseif 语句中条件会再次求值。如果条件比一个简单的比较要复杂得多或者在一个很多次的循环中,那么用 switch 语句可能会快一些。
case 表达式可以是任何求值为简单类型的表达式,即整型或浮点数以及字符串。不能用数组或对象,除非它们被解除引用成为简单类型。