if (...), while (...) などには、真(true)か偽(false)かを示す条件式を記述します。
<?php if ($count > 10) { echo "BIG\n"; }
下記のものは、偽(false)とみなされます。
<?php if (false) { ... } // boolean型のfalse if (0) { ... } // integer型の0 if (0.0) { ... } // float(double)型の0.0 if ("") { ... } // 空の文字列 if ("0") { ... } // 文字列 "0" if (array()) { ... } // 要素数が0個の配列 if (null) { ... } // 特殊変数null if ($aaa) { ... } // 未定義の変数
文字列を比較する際には、== を用いると暗黙の型変換により正確な比較ができなくなるため、厳密比較の === を用いるのが鉄則です。
<?php if ("100" == "100.0") { ... } // 真(true)になってしまう if ("100" == "10e1") { ... } // 真(true)になってしまう if ("100" == "0100") { ... } // 真(true)になってしまう if ("100" === "100.0") { ... } // 偽(false)になる if ("100" === "10e1") { ... } // 偽(false)になる if ("100" === "0100") { ... } // 偽(false)になる
if は「もし」を意味します。(...) の中に記述した式が真であれば、{ ... } の中の処理を実行します。下記の例では、$var の値が 10より大きければ BIG を表示します。
<?php if ($var > 10) { echo "BIG\n"; }
else は「さもなくば」を意味します。下記の例では、$var が 10より大きければ BIG を、さもなくば SMALL を表示します。
<?php if ($var > 10) { echo "BIG\n"; } else { echo "SMALL\n"; }
elseif は「さもなくばもし」を意味します。下記の例では、$var が 10より大きければ BIG を、10と等しければ NORMAL を、さもなくば SMALL を表示します。
<?php if ($var > 10) { echo "BIG\n"; } elseif ($var == 10) { echo "NORMAL\n"; } else { echo "SMALL\n"; }
else if も elseif と同じ意味を持ちます。
<?php if ($var > 10) { echo "BIG\n"; } else if ($var == 10) { echo "NORMAL\n"; } else { echo "SMALL\n"; }
while は「~の間」を意味します。$i の値が 10よりも小さい間、$i の値を表示します。
<?php $i = 0; while ($i < 10) { echo "$i\n"; $i++; }
do while は「~を実行する(~の間)」を意味します。$i の値が 10よりも小さい間、$i の値を表示します。条件を満たしていなくても最低 1回はループ処理が実行される点が while文と異なります。
<?php $i = 0; do { echo "$i\n"; $i++; } while ($i < 10);
for も「~の間」を意味します。$i に 0 を代入し、$i の値が 10より小さい間、$i の値を加算(インクリメント)しながら、ループ処理を実行します。下記の例は、echo処理を10回繰り返します。
<?php for ($i = 0; $i < 10; $i++) { echo "$i\n"; }
foreach (配列 as 変数) は配列の個々の要素に対して変数に要素を代入しながら処理を実行します。
<?php $color_list = array("Red", "Green", "Blue"); foreach ($color_list as $color) { echo "$color\n"; // Red, Green, Blue が表示される }
文字列を添え字とする配列の場合は次のようにします。
<?php $array = array( "Sun" => "Sunday", "Mon" => "Monday", "Tue" => "Tuesday", ); foreach ($array as $key => $value) { echo "$key = $value\n"; }
break は for、foreach、while、do などのループ処理を抜けます。下記の例では、$i が 5の時に forループを抜けます。
<?php for ($i = 0; $i < 10; $i++) { if ($i == 5) { break; } }
continue は for、foreach、while、do などにおいて、残りのループ処理をスキップします。次の例では、$i が 5の時のみ、echo を実行しません。
<?php for ($i = 0; $i < 10; $i++) { if ($i == 5) { continue; } echo "$i"; // $i が 3の時は実行されない }
switch, case は、値によって処理を振り分けます。次の例では、$day の値が "Sun" の時は "Sunday"、"Mon" の時は "Monday"、"Tue" の時は "Tuesday"、さもなくば "Unknown" を表示します。default には、どの値にもマッチしなかった場合の処理を記述します。
<?php $day = "Sun"; switch ($day) { case "Sun": echo "Sunday\n"; break; case "Mon": echo "Monday\n"; break; case "Tue": echo "Tuesday\n"; break; default: echo "Unknown\n"; break; }
break文が無い場合、次の条件の式まで実行されます。下記の例では、$day が "Mon" の時は "Monday" が表示されますが、"Sun" の時は "Sunday" と "Monday" が表示されます。
<?php $day = "Sun"; switch ($day) { case "Sun": echo "Sunday\n"; // break; が無い case "Mon": echo "Monday\n"; break; default: echo "Unknown\n"; break; }
if (...) { ... }, while (...) { ... } などの構文を、コロン(:)と endif; などを用いて下記の様に記述することもできます。
if ($n == 1): // ... elseif ($n == 2): // ... else: // ... endif;
while ($n == 1): // ... endwhile;
for ($i = 0; $i < 10; $i++): // ... endfor;
foreach ($array as $val): // ... endforeach;
switch ($n): // ... endswitch;
require は指定したファイルを読み込み、PHPファイルとして実行します。
<?php require 'sample.php';
require_once も指定したファイルを読み込みますが、同じファイル名を指定した場合、最初の 1回だけ読み込まれる点が異なります。
<?php require_once 'sample.php'; // 読み込まれる require_once 'sample.php'; // 2回目なので読み込まれない
include, include_once も require, require_once と同様に外部ファイルを読み込みますが、読み込みに失敗した場合、require, require_once の場合は E_COMPILE_ERROR エラーが発生しますが、include, include_once の場合は E_WARNING 警告のみが発行されます。
<?php include 'common.php'; include_once 'sample.php';
goto を用いて、プログラム上の指定したラベルの位置にジャンプすることができます。多重のループから抜ける場合などに使用されます。下記の例では、$i, $j がいずれも 50の時にループを抜けて、end: ラベルの位置にジャンプします。
<?php for ($i = 0; $i < 100; $i++) { for ($j = 0; $j < 100; $j++) { if ($i == 50 && $j == 50) { goto end; } } } end: echo "i = $i, j = $j\n";
throw は、エラーが発生した際に例外(Exception)を投げます。例外が throw されると、関数やメソッドの残りの処理はスキップされます。try { ... } catch の構文は、{ ... } の中、もしくは、{ ... } から呼び出された関数やメソッドの中で投げられた例外を受け取ります。例外を受け取ると、try { ... } の処理はスキップされ、catch() { ... } の処理が実行されます。
<?php function divide($x, $y) { echo "divide(START)\n"; if ($y == 0) { // $y が 0 の場合、例外を throwして残りの処理をスキップする throw new Exception("Divided by zero."); } echo "divide(END)\n"; // 例外がthrowされるとこの行以降は実行されない return $x / $y; } try { echo "Debug1\n"; echo divide(8, 0) . "\n"; echo "Debug2\n"; // 例外がthrowされるとこの行は実行されない } catch (Exception $e) { echo "ERROR: " . $e->getMessage() . "\n"; }
PHP5.5 以降では、finally がサポートされました。final ブロックは、例外の有無に関わらず必ず実行されます。
try { echo divide(8, 0) . "\n"; } catch (Exception $e) { echo "ERROR: " . $e->getMessage() . "\n"; } finally { echo "FINALLY\n"; // 例外の有無に関わらず必ず実行される }
Exception のサブクラスを作成することで、例外の種別を拡張することができます。
<?php class MyException1 extends Exception { } class MyException2 extends Exception { } try { throw new MyException2("MyException2"); } catch (MyException1 $e) { echo "MyException1\n"; // 実行されない } catch (MyException2 $e) { echo "MyException2\n"; // 実行される } catch (Exception $e) { // 親クラス例外はサブクラスより後ろに記述する echo "Exception\n"; // 実行されない }
exit() や die() は、プログラムを終了させます。引数にはプログラムの終了コードを指定します。通常は、正常時は 0、異常時は 0 以外の値を指定します。
<?php echo "AAA\n"; exit(1); echo "BBB\n"; // プログラムが終了するので、この行は実行されない