PHP実践の道(六)制御構造


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、構造モード2
if(expr):
	statement 1
elseif(expr):
	statement 2
elseif(expr):。
	statement 3
……
else
	statement n
end if;

c、指摘すべきことは、(ˇˍˇ) JAva、cなどの言語は一般的に構造1を採用している.phpでは両方のモードが採用できます.注意else ifとelseifの違い
d、構造モード2は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、構造モード2
:exprがtrueの場合に実行されます.これはphpの代替構文です.
while(expr):
	statement
endwhile;

c、構造モード3、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、構造モード2
for(expr1;expr2;expr3):
	statement
endfor;
c、
expr1
サイクルが開始される前に無条件に1回評価する.
expr2
ループが開始されるたびに値を求めます.値がTRUE
を選択すると、ループが続行され、ネストされたループ文が実行されます.値がFALSE
を選択すると、ループが終了します.
expr3
ループのたびに評価されます
d、foreach、それは配列にのみ適用され(PHP 5から、foreachはオブジェクトを遍歴することもできる)、構造モードは以下の2種類のようである.
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文.したがって,構造を明確にするためには,実行結果などの理由でcaseごとに
文の末尾にbreakを付ける
d、defaultはデフォルトの実行ブランチとして、caseの値と順次比較して等しい値がないことが分かった場合、if/else構造のelseブランチに相当するdefaultの文を実行します.
よし、また実験の時間だ、一緒にやろう
<?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、よくある使い方は、多層のbreakの代わりにループやswitchを飛び出すことです.
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:
現在の終了
for
,
foreach
,
while
,
do-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?";		//      
?>