亚洲精品中文字幕无乱码_久久亚洲精品无码AV大片_最新国产免费Av网址_国产精品3级片

php語言

PHP常用控制結(jié)構(gòu)

時(shí)間:2024-07-02 12:30:02 php語言 我要投稿
  • 相關(guān)推薦

PHP常用控制結(jié)構(gòu)

  不要嘲笑鐵樹。為了開一次花,它付出了比別的樹種更長久的努力。 以下是小編為大家搜索整理了PHP常用控制結(jié)構(gòu),希望能給大家?guī)韼椭?更多精彩內(nèi)容請(qǐng)及時(shí)關(guān)注我們應(yīng)屆畢業(yè)生考試網(wǎng)!

  控制結(jié)構(gòu)

  目錄 流程控制的替代語法

  任何 PHP 腳本都是由一系列語句構(gòu)成的。一條語句可以是一個(gè)賦值語句,一個(gè)函數(shù)調(diào)用,一個(gè)循環(huán),一個(gè)條件語句或者甚至是一個(gè)什么也不做的語句(空語句)。語句通常以分號(hào)結(jié)束。此外,還可以用花括號(hào)將一組語句封裝成一個(gè)語句組。語句組本身可以當(dāng)作是一行語句。本章講述了各種語句類型。 if

  if 結(jié)構(gòu)是很多語言包括 PHP 在內(nèi)最重要的特性之一,它允許按照條件執(zhí)行代碼片段。PHP 的 if 結(jié)構(gòu)和 C 語言相似:

  if (expr)

  statement

  ?>

  expr 按照布爾求值。如果 expr 的值為 TRUE,PHP 將執(zhí)行 statement,如果值為 FALSE - 將忽略 statement。有關(guān)哪些值被視為 FALSE 的更多信息參見轉(zhuǎn)換為布爾值一節(jié)。

  如果 $a 大于 $b,則以下例子將顯示 a is bigger than b:

  if ($a > $b)

  echo "a is bigger than b";

  ?>

  經(jīng)常需要按照條件執(zhí)行不止一條語句,當(dāng)然并不需要給每條語句都加上一個(gè) if 子句?梢詫⑦@些語句放入語句組中。例如,如果 $a 大于 $b,以下代碼將顯示 a is bigger than b 并且將 $a 的值賦給 $b:

  if ($a > $b) {

  echo "a is bigger than b";

  $b = $a;

  }

  ?>

  if 語句可以無限層地嵌套在其它 if 語句中,這給程序的不同部分的條件執(zhí)行提供了充分的彈性。

  : 語言參考 : 控制結(jié)構(gòu) else

  經(jīng)常需要在滿足某個(gè)條件時(shí)執(zhí)行一條語句,而在不滿足該條件時(shí)執(zhí)行其它語句,這正是 else 的功能。else 延伸了 if 語句,可以在 if 語句中的表達(dá)式的值為 FALSE 時(shí)執(zhí)行語句。例如以下代碼在 $a 大于 $b 時(shí)顯示 a is bigger than b,反之則顯示 a is NOT bigger than b: copy to clipboard

  if ($a > $b) {

  echo "a is bigger than b";

  } else {

  echo "a is NOT bigger than b";

  }

  ?>

  else 語句僅在 if 以及 elseif(如果有的話)語句中的表達(dá)式的值為 FALSE 時(shí)執(zhí)行(參見 elseif)。

  << 控制結(jié)構(gòu) Main : 語言參考 : 控制結(jié)構(gòu) : else This page online Report a bug elseif >> elseif

  elseif,和此名稱暗示的一樣,是 if 和 else 的組合。和 else 一樣,它延伸了 if 語句,可以在原來的 if 表達(dá)式值為 FALSE 時(shí)執(zhí)行不同語句。但是和 else 不一樣的是,它僅在 elseif 的條件表達(dá)式值為 TRUE 時(shí)執(zhí)行語句。例如以下代碼將根據(jù)條件分別顯示 a is bigger than b,a equal to b 或者 a is smaller than b: copy to clipboard

  if ($a > $b) {

  echo "a is bigger than b";

  } elseif ($a == $b) {

  echo "a is equal to b";

  } else {

  echo "a is smaller than b";

  }

  ?>

  在同一個(gè) if 結(jié)構(gòu)中可以有多個(gè) elseif 語句。第一個(gè)表達(dá)式值為 TRUE 的 elseif 語句(如果有的話)將會(huì)執(zhí)行。在 PHP 中,也可以寫成“else if”(兩個(gè)單詞),它和“elseif”(一個(gè)單詞)的行為完全一樣。句法分析的含義有少許區(qū)別(如果你熟悉 C 語言的話,這是同樣的行為),但是底線是兩者會(huì)產(chǎn)生完全一樣的行為。

  elseif 的語句僅在之前的 if 或 elseif 的表達(dá)式值為 FALSE,而當(dāng)前的 elseif 表達(dá)式值為 TRUE 時(shí)執(zhí)行。

  Main : 語言參考 : 控制結(jié)構(gòu) : elseif This page online Report a bug 流程控制的替代語法 >> << else 流程控制的替代語法

  PHP 提供了一些流程控制的替代語法,包括 if,while,for,foreach 和 switch。替代語法的基本形式是把左花括號(hào)({)換成冒號(hào)(:),把右花括號(hào)(})分別換成 endif;,endwhile;,endfor;,endforeach; 以及 endswitch;。 copy to clipboard

  A is equal to 5

  在上面的例子中,HTML 內(nèi)容“A is equal to 5”用替代語法嵌套在 if 語句中。該 HTML 的內(nèi)容僅在 $a 等于 5 時(shí)顯示。

  替代語法同樣可以用在 else 和 elseif 中。下面是一個(gè)包括 elseif 和 else 的 if 結(jié)構(gòu)用替代語法格式寫的例子: copy to clipboard

  if ($a == 5):

  echo "a equals 5";

  echo "...";

  elseif ($a == 6):

  echo "a equals 6";

  echo "!!!";

  else:

  echo "a is neither 5 nor 6";

  endif;

  ?>

  更多例子參見 while,for 和 if。

  Main : 語言參考 : 控制結(jié)構(gòu) : 流程控制的替代語法 This page online Report a bug << elseif while >> while

  while 循環(huán)是 PHP 中最簡(jiǎn)單的循環(huán)類型。它和 C 語言中的 while 表現(xiàn)得一樣。while 語句的基本格式是: copy to clipboard

  while (expr)

  statement

  while 語句的含意很簡(jiǎn)單,它告訴 PHP 只要 while 表達(dá)式的值為 TRUE 就重復(fù)執(zhí)行嵌套中的循環(huán)語句。表達(dá)式的值在每次開始循環(huán)時(shí)檢查,所以即使這個(gè)值在循環(huán)語句中改變了,語句也不會(huì)停止執(zhí)行,直到本次循環(huán)結(jié)束。有時(shí)候如果 while 表達(dá)式的值一開始就是 FALSE,則循環(huán)語句一次都不會(huì)執(zhí)行。

  和 if 語句一樣,可以在 while 循環(huán)中用花括號(hào)括起一個(gè)語句組,或者用替代語法: copy to clipboard

  while (expr):

  statement

  ...

  endwhile;

  下面兩個(gè)例子完全一樣,都顯示數(shù)字 1 到 10: copy to clipboard

  /* example 1 */

  $i = 1;

  while ($i <= 10) {

  echo $i++; /* the printed value would be

  $i before the increment

  (post-increment) */

  }

  /* example 2 */

  $i = 1;

  while ($i <= 10):

  print $i;

  $i++;

  endwhile;

  ?>

  << 流程控制的替Main : 語言參考 : 控制結(jié)代語法 構(gòu) : while This page online Report a bug

  do-while do-while >>

  do-while 和 while 循環(huán)非常相似,區(qū)別在于表達(dá)式的值是在每次循環(huán)結(jié)束時(shí)檢查而不是開始時(shí)。和正規(guī)的 while 循環(huán)主要的區(qū)別是 do-while 的循環(huán)語句保證會(huì)執(zhí)行一次(表達(dá)式的真值在每次循環(huán)結(jié)束后檢查),然而在正規(guī)的 while 循環(huán)中就不一定了(表達(dá)式真值在循環(huán)開始時(shí)檢查,如果一開始就為 FALSE 則整個(gè)循環(huán)立即終止)。

  do-while 循環(huán)只有一種語法: copy to clipboard

  $i = 0;

  do {

  echo $i;

  } while ($i > 0);

  ?>

  以上循環(huán)將正好運(yùn)行一次,因?yàn)榻?jīng)過第一次循環(huán)后,當(dāng)檢查表達(dá)式的真值時(shí),其值為 FALSE($i 不大于 0)而導(dǎo)致循環(huán)終止。

  資深的 C 語言用戶可能熟悉另一種不同的 do-while 循環(huán)用法,把語句放在 do-while(0) 之中,在循環(huán)內(nèi)部用 break 語句來結(jié)束執(zhí)行循環(huán)。以下代碼片段示范了此方法: copy to clipboard

  do {

  if ($i < 5) {

  echo "i is not big enough";

  break;

  }

  $i *= $factor;

  if ($i < $minimum_limit) {

  break;

  }

  echo "i is ok";

  /* process i */

  } while(0);

  ?>

  如果還不能立刻理解也不用擔(dān)心。即使不用此“特性”也照樣可以寫出強(qiáng)大的代碼來。

  for

  copy to clipboard

  for (expr1; expr2; expr3)

  statement

  第一個(gè)表達(dá)式(expr1)在循環(huán)開始前無條件求值一次。

  expr2 在每次循環(huán)開始前求值。如果值為 TRUE,則繼續(xù)循環(huán),執(zhí)行嵌套的循環(huán)語句。如果值為 FALSE,則終止循環(huán)。

  expr3 在每次循環(huán)之后被求值(執(zhí)行)。

  每個(gè)表達(dá)式都可以為空。expr2 為空意味著將無限循環(huán)下去(和 C 一樣,PHP 認(rèn)為其值為 TRUE)。這可能不像想象中那樣沒有用,因?yàn)榻?jīng)常會(huì)希望用 break 語句來結(jié)束循環(huán)而不是用 for 的表達(dá)式真值判斷。

  考慮以下的例子,它們都顯示數(shù)字 1 到 10: copy to clipboard

  /* example 1 */

  for ($i = 1; $i <= 10; $i++) {

  echo $i;

  }

  /* example 2 */

  for ($i = 1; ; $i++) {

  if ($i > 10) {

  break;

  }

  echo $i;

  }

  /* example 3 */

  $i = 1;

  for (;;) {

  if ($i > 10) {

  break;

  }

  echo $i;

  $i++;

  }

  /* example 4 */

  for ($i = 1; $i <= 10; echo $i, $i++);

  ?>

  當(dāng)然,第一個(gè)例子看上去最正常(或者第四個(gè)),但用戶可能會(huì)發(fā)現(xiàn)在 for 循環(huán)中用空的表達(dá)式在很多場(chǎng)合下會(huì)很方便。

  PHP 也支持用冒號(hào)的 for 循環(huán)的替代語法。 copy to clipboard

  for (expr1; expr2; expr3):

  statement;

  ...

  endfor; << do-while Main : 語言參考 : 控制結(jié)構(gòu) : for This page online Report a bug foreach >> foreach

  PHP 4 引入了 foreach 結(jié)構(gòu),和 Perl 以及其他語言很像。這只是一種遍歷數(shù)組簡(jiǎn)便方法。foreach 僅能用于數(shù)組,當(dāng)試圖將其用于其它數(shù)據(jù)類型或者一個(gè)未初始化的變量時(shí)會(huì)產(chǎn)生錯(cuò)誤。有兩種語法,第二種比較次要但卻是第一種的有用的擴(kuò)展。 copy to clipboard

  foreach (array_expression as $value)

  statement

  foreach (array_expression as $key => $value)

  statement

  第一種格式遍歷給定的 array_expression 數(shù)組。每次循環(huán)中,當(dāng)前單元的值被賦給 $value 并且數(shù)組內(nèi)部的指針向前移一步(因此下一次循環(huán)中將會(huì)得到下一個(gè)單元)。

  第二種格式做同樣的事,只除了當(dāng)前單元的鍵名也會(huì)在每次循環(huán)中被賦給變量 $key。

  自PHP 5 起,還可能遍歷對(duì)象。

  注意:

  當(dāng) foreach 開始執(zhí)行時(shí),數(shù)組內(nèi)部的指針會(huì)自動(dòng)指向第一個(gè)單元。這意味著不需要在 foreach 循環(huán)之前調(diào)用 reset()。

  注意:

  除非數(shù)組是被引用,foreach 所操作的是指定數(shù)組的一個(gè)拷貝,而不是該數(shù)組本身。因此數(shù)組指針不會(huì)被 each() 結(jié)構(gòu)改變,對(duì)返回的數(shù)組單元的修改也不會(huì)影響原數(shù)組。不過原數(shù)組的內(nèi)部指針的確在處理數(shù)組的過程中向前移動(dòng)了。假定 foreach 循環(huán)運(yùn)行到結(jié)束,原數(shù)組的內(nèi)部指針將指向數(shù)組的結(jié)尾。

  自 PHP 5 起,可以很容易地通過在 $value 之前加上 & 來修改數(shù)組的單元。此方法將以引用賦值而不是拷貝一個(gè)值。 copy to clipboard

  $arr = array(1, 2, 3, 4);

  foreach ($arr as &$value) {

  $value = $value * 2;

  }

  // $arr is now array(2, 4, 6, 8)

  ?>

  此方法僅在被遍歷的數(shù)組可以被引用時(shí)才可用(例如是個(gè)變量)。 注意:

  foreach 不支持用“@”來抑制錯(cuò)誤信息的能力。

  用戶可能注意到了以下的代碼功能完全相同: copy to clipboard

  $arr = array("one", "two", "three");

  reset($arr);

  while (list(, $value) = each($arr)) {

  echo "Value: $value

  \n";0

  }

  foreach ($arr as $value) {

  echo "Value: $value

  \n";

  }

  ?>

  以下代碼功能也完全相同: copy to clipboard

  $arr = array("one", "two", "three");

  reset($arr);

  while (list($key, $value) = each($arr)) {

  echo "Key: $key; Value: $value

  \n";

  }

  foreach ($arr as $key => $value) {

  echo "Key: $key; Value: $value

  \n";

  }

  ?>

  示范用法的更多例子: copy to clipboard

  /* foreach example 1: value only */

  $a = array(1, 2, 3, 17);

  foreach ($a as $v) {

  echo "Current value of \$a: $v.\n";

  }

  /* foreach example 2: value (with key printed for illustration) */

  $a = array(1, 2, 3, 17);

  $i = 0; /* for illustrative purposes only */

  foreach ($a as $v) {

  echo "\$a[$i] => $v.\n";

  $i++;

  }

  /* foreach example 3: key and value */

  $a = array(

  "one" => 1,

  "two" => 2,

  "three" => 3,

  "seventeen" => 17

  );

  foreach ($a as $k => $v) {

  echo "\$a[$k] => $v.\n";

  }

  /* foreach example 4: multi-dimensional arrays */

  $a = array();

  $a[0][0] = "a";

  $a[0][1] = "b";

  $a[1][0] = "y";

  $a[1][1] = "z";

  foreach ($a as $v1) {

  foreach ($v1 as $v2) {

  echo "$v2\n";

  }

  }

  /* foreach example 5: dynamic arrays */

  foreach (array(1, 2, 3, 4, 5) as $v) {

  echo "$v\n";

  }

  ?>

  << for Main : 語言參考 : 控制結(jié)構(gòu) : foreach This page online Report a bug break >> break

  break 結(jié)束當(dāng)前 for,foreach,while,do-while 或者 switch 結(jié)構(gòu)的執(zhí)行。 break 可以接受一個(gè)可選的數(shù)字參數(shù)來決定跳出幾重循環(huán)。 copy to clipboard

  $arr = array('one', 'two', 'three', 'four', 'stop', 'five');

  while (list (, $val) = each($arr)) {

  if ($val == 'stop') {

  break; /* You could also write 'break 1;' here. */ }

  echo "$val

  \n";

  }

  /* Using the optional argument. */

  $i = 0;

  while (++$i) {

  switch ($i) {

  case 5:

  echo "At 5

  \n";

  break 1; /* Exit only the switch. */

  case 10:

  echo "At 10; quitting

  \n";

  break 2; /* Exit the switch and the while. */

  default:

  break;

  }

  }

  ?>

  << foreach Main : 語言參考 : 控制結(jié)構(gòu) : break This page online Report a bug continue >> continue

  continue 在循環(huán)結(jié)構(gòu)用用來跳過本次循環(huán)中剩余的代碼并在條件求值為真時(shí)開始執(zhí)行下一次循環(huán)。

  注意:

  注意在 PHP 中 switch 語句被認(rèn)為是可以使用 continue 的一種循環(huán)結(jié)構(gòu)。 continue 接受一個(gè)可選的數(shù)字參數(shù)來決定跳過幾重循環(huán)到循環(huán)結(jié)尾。 copy to clipboard

  while (list ($key, $value) = each($arr)) {

  if (!($key % 2)) { // skip odd members

  continue;

  }

  do_something_odd($value);

  }

  $i = 0;

  while ($i++ < 5) {

  echo "Outer

  \n";

  while (1) {

  echo " Middle

  \n";

  while (1) {

  echo " Inner

  \n";

  continue 3;

  }

  echo "This never gets output.

  \n";

  }

  echo "Neither does this.

  \n";

  }

  ?>

  省略 continue 后面的分號(hào)會(huì)導(dǎo)致混淆。以下例子示意了不應(yīng)該這樣做。 copy to clipboard

  for ($i = 0; $i < 5; ++$i) {

  if ($i == 2)

  continue

  print "$i\n";

  }

  ?>

  希望得到的結(jié)果是: copy to clipboard

  1

  3

  4

  可實(shí)際的輸出是: copy to clipboard

  2

  因?yàn)?print() 調(diào)用的返回值是 int(1),看上去作為了上述可選的數(shù)字參數(shù)。

  << break Main : 語言參考 : 控制結(jié)構(gòu) : continue This page online Report a bug switch >> switch

  switch 語句和具有同樣表達(dá)式的一系列的 IF 語句相似。很多場(chǎng)合下需要把同一個(gè)變量(或表達(dá)式)與很多不同的值比較,并根據(jù)它等于哪個(gè)值來執(zhí)行不同的代碼。這正是 switch 語句的用途。

  注意:

  注意和其它語言不同,continue 語句作用到 switch 上的作用類似于 break。如果在循環(huán)中有一個(gè) switch 并希望 continue 到外層循環(huán)中的下一個(gè)輪回,用 continue 2。

  下面兩個(gè)例子使用兩種不同方法實(shí)現(xiàn)同樣的事,一個(gè)用一系列的 if 語句,另一個(gè)用 switch 語句:

  例 7.1. switch 結(jié)構(gòu)

  if ($i == 0) {

  echo "i equals 0";

  } elseif ($i == 1) {

  echo "i equals 1";

  } elseif ($i == 2) {

  echo "i equals 2";

  }

  switch ($i) {

  case 0:

  echo "i equals 0";

  break;

  case 1:

  echo "i equals 1";

  break;

  case 2:

  echo "i equals 2";

  break;

  }

  ?>

  例 7.2. switch 結(jié)構(gòu)可以用字符串

  switch ($i) {

  case "apple":

  echo "i is apple";

  break;

  case "bar":

  echo "i is bar";

  break;

  case "cake":

  echo "i is cake";

  break;

  }

  ?>

  為避免錯(cuò)誤,理解 switch 是怎樣執(zhí)行的非常重要。switch 語句一行接一行地執(zhí)行(實(shí)際上是語句接語句)。開始時(shí)沒有代碼被執(zhí)行。僅當(dāng)一個(gè) case 語句中的值和 switch 表達(dá)式的值匹配時(shí) PHP 才開始執(zhí)行語句,直到 switch 的程序段結(jié)束或者遇到第一個(gè) break 語句為止。如果不在 case 的語句段最后寫上 break 的話,PHP 將繼續(xù)執(zhí)行下一個(gè) case 中的語句段。例如:

  switch ($i) {

  case 0:

  echo "i equals 0";

  case 1:

  echo "i equals 1";

  case 2:

  echo "i equals 2";

  }

  ?>

  這里如果 $i 等于 0,PHP 將執(zhí)行所有的 print 語句!如果 $i 等于 1,PHP 將執(zhí)行后面兩條 print 語句。只有當(dāng) $i 等于 2 時(shí),才會(huì)得到“預(yù)期”的結(jié)果――只顯示“i equals 2”。所以,別忘了 break 語句就很重要(即使在某些情況下故意想避免提供它們時(shí))。

【PHP常用控制結(jié)構(gòu)】相關(guān)文章:

PHP開發(fā)CS結(jié)構(gòu)的技巧11-09

PHP知識(shí):條件結(jié)構(gòu)語句12-06

PHP中使用會(huì)話控制11-21

PHP讀書筆記整理結(jié)構(gòu)語句03-02

學(xué)習(xí)php編程語言 php常用英語單詞11-17

PHP工程師應(yīng)該掌握的知識(shí)結(jié)構(gòu)03-18

PHP常用MySql操作的方法03-27

PHP常用的文件操作函數(shù)11-26

10個(gè)常用的PHP技術(shù)技巧03-01