搜尋
首頁php教程PHP开发PHP的switch判斷語句的「進階」用法詳解

只所以稱為「高級」用法,是因為我連switch的最基礎的用法都還沒掌握,so,接下來講的其實還是它的基礎用法!

switch 語句和一系列具有相同表達式的的 IF 語句相似。很多場合下需要把同一個變數(或表達式)與很多不同的值比較,並根據它等於哪個值來執行不同的程式碼。這正是 switch 語句的用途。

注意: 注意和其它語言不同,continue 語句作用到 switch 上的作用類似於 break。如果在循環中有一個 switch 並希望 continue 到外層循環中的下一個輪迴,用 continue 2。

下面兩個例子使用兩種不同方法實現相同的事,一個用一系列的if 語句,另一個用switch 語句:

Example #1 switch 結構

<?php
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;
}
?>

Example #2 switch 結構可以用字串

<?php
switch ($i)
{
 case "apple":
  echo "i is apple";
  break;
 case "bar":
  echo "i is bar";
  break;
 case "cake":
  echo "i is cake";
  break;
}
?>

重點:(這就是我先前一直沒掌握的地方!)

為避免錯誤,理解switch 是怎麼執行的非常重要。 switch 語句一行接一行地執行(其實是語句接語句)。開始時沒有程式碼被執行。只有當一個 case 語句中的值和 switch 表達式的值匹配時 PHP 才開始執行語句,直到 switch 的程式段結束(如 return 語句)或遇到第一個 break 語句為止。如果不在 case 的語句段最後寫上 break 的話,PHP 會繼續執行下一個 case 中的語句段。例如: 

<?php
switch ($i)
{
 case 0:
  echo "i equals 0";
 case 1:
  echo "i equals 1";
 case 2:
  echo "i equals 2";
}
?>

特別說明:這裡如果 $i 等於 3,PHP不會執行任何echo語句!但是,如果 $i 等於 0,PHP 將執行所有的 echo 語句!如果 $i 等於 1,PHP 將執行後面兩個 echo 語句。只有當 $i 等於 2 時,才會得到「預期」的結果—只顯示「i equals 2」。所以,別忘了 break 語句就很重要(即使在某些情況下故意想避免提供它們時)。

[效率]在 switch 語句中條件只求值一次並用來和每個 case 語句比較。在 elseif 語句中條件會再次求值。如果條件比一個簡單的比較要複雜得多或在一個很多次的迴圈中,那麼用 switch 語句可能會快一些。

在一個 case 中的語句也可以為空,這樣只不過將控制轉移到了下一個 case 中的語句。 

<?php
switch ($i)
{
 case 0:
 case 1:
 case 2:
  echo "i is less than 3 but not negative";
  break;
 case 3:
  echo "i is 3";
}
?>

一個 case 的特例是 default。它匹配了任何和其它 case 都不匹配的情況。例如:

<?php
switch ($i)
{
 case 0:
  echo "i equals 0";
  break;
 case 1:
  echo "i equals 1";
  break;
 case 2:
  echo "i equals 2";
  break;
 default:
  echo "i is not equal to 0, 1 or 2";
}
?>

case 表達式可以是任何求值為簡單類型的表達式,即整數或浮點數以及字串。不能用數組或對象,除非它們被解除引用成為簡單型別。


【實戰】 根據上面的知識點,寫這麼一個函數:計算容量值實際代表的位元組數

<?php
/**
 * 返回字节数
 *
 * @param string $val 如 400M
 */
function return_bytes($val = &#39;&#39;)
{
 $val = trim($val);
 $last = strtolower($val{strlen($val)-1});
 switch ($last)
 {
  case &#39;g&#39;:
   $val *= 1024;
  case &#39;m&#39;:
   $val *= 1024;
  case &#39;k&#39;:
   $val *= 1024;
 }

 return $val;
}
$memorylimit = ini_get(&#39;memory_limit&#39;);
echo $memorylimit, &#39;<br/>&#39;;
echo return_bytes($memorylimit);

輸出:

400M
419430400

特別說明:$val = 400M時,case 'm' 被命中,其下的$val *= 1024; 被執行,但因為沒有break 語言,所以會繼續命中case 'k',並執行其下的$val *= 1024;語句,so,總體上相當於執行了400 * 1024 * 1024 。

更多PHP的switch判斷語句的「進階」用法詳解相關文章請關注PHP中文網!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。