PHP實踐之路(六)控制結構

cyxlzzs發表於2013-06-29

PHP實踐之路(目錄索引)

PHP中控制結構

首先要說明的一點是:在php中和其他高階語言類似,在一對大括號{}中間的語句稱為一個語句組。每條語句都是以分號作為結尾

1、if/else控制結構

a、結構模式一
if(expr){
	statement 1
}
else if(expr){
	statement 2
}
else if(expr){
	statement 3
}
……
else{
	statement n
}
b、結構模式二
if(expr):
	statement 1
elseif(expr):
	statement 2
elseif(expr):。
	statement 3
……
else
	statement n
end if;

c、需要指出的是,(ˇˍˇ) java、c等語言一般都採用結構一。php中兩種模式都可以採用。注意其中else if和elseif的區別
d、結構模式二作為php中一種控制結構的替代語法,詳情見其他部分。在替代語法中不允許將elseif分開,否則編譯將出錯

實驗時間
<?php
$a=1;
$b=2;
if($a==$b):
	echo '$a = $b';
	echo ' see1?';
elseif($a>$b):
	echo '$a > $b';
	echo ' see2?';
else:				//這裡執行else 將輸出 $a < $b see3?
	echo '$a < $b';
	echo ' see3?';
endif;

echo '<br />';		//換行
$a=3;
if($a==$b){
	echo '$a = $b';
	echo ' see4?';
}
else if($a > $b){	//這裡將執行,將輸出 $a > $b see5?
	echo '$a > $b';
	echo ' see5?';
}
else{
	echo '$a < $b';
	echo ' see6?';
}
?>

2、while控制結構

a、結構模式一:當expr為true時執行
while(expr){
	statement
}
b、結構模式二:當expr為true時執行,這是一種php中的替代語法
while(expr):
	statement
endwhile;

c、結構模式三,do/while迴圈,先執行語句後檢查條件
do{
	statement
}while(expr);
實驗時間
<?php
$count = 0;

while($count<=10){
	echo $count;
	echo " ";		//輸出一個空格
	$count++;
}
//以上將輸出 0 1 2 3 4 5 6 7 8 9 10 

//接下來測試替代語法
$count = 0;		//重置0
echo "<br />";	//換行
while($count<=5):
	echo $count;
	echo " ";		//輸出一個空格
	$count++;
endwhile;
//以上將輸出 0 1 2 3 4 5

$count = 0;		//重置0
echo "<br />";	//換行
do{
	echo $count;
	echo " ";		//輸出一個空格
	$count++;
}while($count<=5);
//以上將輸出 0 1 2 3 4 5

/********看看一下while和do/while兩種迴圈的區別**********/
echo "<br />";	//換行
$count=0;
while($count>0){
	echo "see1?";		//不執行
}
$count=0;
do{
	echo "see2?";		//執行了一次,do/while迴圈最少執行一次迴圈內部的語句
}while($count>0);

?>

3、for控制結構

a、結構模式一
for(expr1;expr2;expr3){
	statement
}
b、結構模式二
for(expr1;expr2;expr3):
	statement
endfor;
c、
expr1在迴圈開始前無條件求值一次;
expr2 在每次迴圈開始前求值。如果值為TRUE,則繼續迴圈,執行巢狀的迴圈語句。如果值為FALSE,則終止迴圈;
expr3 在每次迴圈之後被求值
d、foreach,它只適用於陣列(自PHP5開始,foreach也可以遍歷物件),結構模式如以下兩種
foreach (array_expression as $value){
	statement
}

foreach (array_expression as $key => $value){
	statement
}
每次執行forech時,陣列內部的指標都會重新指向第一個單元,所以沒必要擔心執行一次後指標索引到哪了

實驗時間
<?php
for($count=0;$count<10;$count++){
	echo $count;
	echo " ";		//空格
}
//以上輸出 0 1 2 3 4 5 6 7 8 9 
echo "<br />";		//換行

for($count=0;$count<5;$count++):
	echo $count;
	echo " ";		//空格
endfor;
//以上輸出 0 1 2 3 4
echo "<br />";		//換行
$arr=array(1,2,3,4);
foreach ($arr as $value){
	echo $value;
	echo " ";		//空格
}
//以上輸出 1 2 3 4
echo "<br />";		//換行
foreach ($arr as $key => $value){
	echo $key."->".$value;
	echo " ";		//空格
}
//以上輸出 0->1 1->2 2->3 3->4   

/*************以下測試foreach遍歷物件**************/
echo "<br />";		//換行
class Person{
	public $name="cyxl";
	private $age=26;
	
	public function loop(){
		foreach($this as $key => $val){
			echo $key."->".$val;
			echo " ";		//空格
		}
	}
}
$p=new Person;
foreach($p as $key => $val){
	echo $key."->".$val;
	echo " ";		//空格
}
//以上輸出 name->cyxl
echo "<br />";		//換行
$p->loop();		//輸出 name->cyxl age->26

//想想兩次遍歷物件$p為什麼結果不一樣,如果有物件導向知識基礎的,
//可以看看$name和$age前面的兩個修飾符public和private的區別.沒有
//也沒關係,後面我們將物件時會詳細講到的
?>

4、swith控制結構

a、結果模式一
switch(expr){
	case val1:
		statement
		break;
	case val2:
		statement
		break;
	……
	default:
		statement
}

b、結構模式二,替代語法
switch(expr):
	case val1:
		statement
		break;
	case val2:
		statement
		break;
	……
	default:
		statement
endswitch;

c、以上模式為一般模式,其中statement、break;、default等是可選的
d、case後面的冒號“:”可以用分號“;”代替
e、switch中的表示式expr可以任意簡單型別,如整數,浮點數和字串。它只會被求值一次(if/else結構中每次都會重新求值,考慮到相率
方面可以考慮採用switch結構),然後從上往下依次和case中的值進行比較。當執行一個case中的語句末尾沒有break語句的話,它還會執行
下一個case語句。所以為了讓結構清晰,執行結果等原因最好是在每條case語句末尾都加上break
d、default作為一個預設的執行分支,當依次和case中的值比較發現沒有相等的值時執行default中的語句,相當於if/else結構中的else分支
好,又到了實驗時間了,一起動動手吧
<?php
$i=0;
switch ($i) {
    case 0:
        echo "i equals 0<br />";
    case 1:
        echo "i equals 1<br />";
    case 2:
        echo "i equals 2<br />";
}
//以上將輸出
/*
i equals 0
i equals 1
i equals 2
*/
switch ($i) {
    case 0:
        echo "i equals 0<br />";
		break;		//我們加上break比較一下輸出結果
    case 1:
        echo "i equals 1<br />";
		break;
    case 2:
        echo "i equals 2<br />";
		break;
}
//以上將輸出 i equals 0

$name="jack";
switch($name):
	case "lily";     //用分號代替冒號
		echo "name is lily<br />";
		break;
	case "jack";
		echo "name is jack<br />";
		break;
	default;
		echo "defautl name<br />";
		break;
endswitch;
//以上輸出 name is jack
$name="";
switch($name):
	case "lily";
		echo "name is lily<br />";
		break;
	case "jack";
		echo "name is jack<br />";
		break;
	default;
		echo "defautl name<br />";
		break;
endswitch;
//以上輸出 defautl name
?>

5、goto控制結構

a、goto操作符可以用來跳轉到程式中的某一指定位置。該目標位置可以用目標名稱加上冒號來標記
b、PHP中只能在同一個檔案和作用域中跳轉,也就是說你無法跳出一個函式或類方法,也無法跳入到另一個函式。你也無法跳入到任何迴圈或者switch 結構中
c、常見的用法是用來跳出迴圈或者switch,可以代替多層的break
d、由於goto結構很容易就破壞了程式的執行流程,使用時應當謹慎
好了,我們來實驗一下吧
<?php
$count=10;

while($count>0){
	$count--;
	if($count==5){
		goto end;
	}
	echo "count to ".$count;
	echo "<br />";
}
//以上將輸出
/*
count to 9
count to 8
count to 7
count to 6
game over..
*/
end:
	echo "game over...";

?>

6、其他

a、php中的替代語法:包括 if,while,for,foreach 和 switch。替代語法的基本形式是把左花括號({)換成冒號(:),把右花括號(})分別換成 endif;,endwhile;,endfor;,endforeach; 以及 endswitch;結合以上的例子,我們已經在例子中使用了一些替代語法
b、break:結束當前forforeachwhiledo-while 或者 switch 結構的執行。可以接受一個可選的數字引數來決定跳出幾重迴圈
c、continue:在迴圈結構用用來跳過本次迴圈中剩餘的程式碼並在條件求值為真時開始執行下一次迴圈;它可以接受一個可選的數字引數來決定跳過幾重迴圈到迴圈結尾
d、return:結束當前函式或者指令碼的執行,具體看return使用的具體位置
接下來我們做幾個實驗
<?php
$count=10;

while($count>0){
	$count--;
	if($count==8){
		continue;	//執行下一次迴圈
	}
	if($count==5){
		break;		//直接跳出迴圈
	}
	echo "count to ".$count;
	echo "<br />";
}
//以上輸出結果如下
/*
count to 9
count to 7
count to 6
*/

function calc($a,$b){
	return $a + $b;		//返回相加的結果,結束當前函式
}

echo(calc(1,2));	//輸出結果3

return;	//結束主指令碼的執行

echo "see?";		//不再執行輸出
?>


版權宣告:本文為博主原創文章,未經博主允許不得轉載。

相關文章