PHP: 制御構文
September 10, 2020
if / else / elseif / else if #
単一の statement でも常に波括弧を付けたい(単一の statement なら波括弧不要なのは C 言語と同じ)。
<?php
if (expr) {
statement;
}
if ~ elseif ~ else
を使う。
<?php
if (expr1) {
statement1;
} elseif (expr2) {
statement2;
} else if (expr3) {
statement3;
} else {
statement4;
}
elseif
と else if
は等価だが、 endif
を使う場合は elseif
を使う必要がある。
<?php
if (expr1):
statement1;
elseif (expr2):
statement2;
else:
statement3;
endif;
while / do-while #
expr
が TRUE で処理が実行される。
<?php
while (expr) {
statement;
}
<?php
do {
statement;
} while (expr);
for #
<?php
for (initialization; condition; final_expression;) {
statement;
}
具体例。
<?php
for ($i = 0; $i < 10; $i++) {
echo $i . "\n";
}
foreach #
<?php
foreach (array_expression as $value) {
statement;
}
<?php
foreach (array_expression as $key => $value) {
statement;
}
break #
ループ( for
foreach
while
do-while
) および switch
の制御構造から抜ける。
<?php
while (expr1) {
statement1;
if (expr2) {
break;
}
statement2;
}
break
は引数をとることができてデフォルトは 1
。引数の数だけネストした制御構造を抜ける。
continue #
break
同様 for
foreach
while
do-while
switch
の制御構造で利用。 break
は制御構造全体を抜けるのに対し、 continue
は現在のループをスキップする。
<?php
while (expr1) {
statement1;
if (expr2) {
continue;
}
statement2;
}
continue
も引数をとることができてデフォルトは 1
。引数の数だけネストした制御構造に対してのスキップになる。
switch での continue 利用 #
PHP においては switch
もループの制御構文とされているので continue
が使えるが非推奨なので warning が出力される。 break
を使いましょう。
switch #
<?php
switch ($val) {
case $val1:
statement1;
break;
case $val2:
statement2;
break;
case $val3:
case $val4:
statement3;
break;
default:
statement4;
}
return #
関数呼び出しから抜ける & 値を返す。値を指定しない場合は NULL
が返る。
<?php
function func() {
statement;
return $val;
}
require
include
require_once
include_once
で読み込まれたスクリプトファイルの場合は読み込まれたファイルの実行をそこで終了し、読み込み元へ値を返す。
require / include / require_once / include_once #
別のスクリプトファイルを読み込む。ファイルを読み込めなかった場合、 require
はエラー、 include
はワーニングを出力する。
require_once
include_once
はまだ読み込んでいないファイルを一度だけ読み込む。
指定されたファイルパスは include_path
で設定されているディレクトリリストから順に探索を行う。
goto #
用意されてるけど使わない事を推奨。
<?php
goto a;
statement1;
a:
statement2;
言語構造として組み込まれている関数 #
list()
array()
echo
eval()
try ~ catch #
<?php
try {
print "start try statements" . "\n";
throw new Exception("___some_exception___");
} catch (Exception $e) {
print $e . "\n";
}
start try statements
Exception: ___some_exception___ in /usr/src/myapp/a.php:4
Stack trace:
#0 {main}
- finally は必ず最後に実行される
- 複数の catch を置ける
- 構文的には catch か finally どちらかが必須
- catch がないと発生した例外が上位に raise され finally の実行だけ保証される
<?php
try {
print "start try statements" . "\n";
throw new Exception("___some_error___");
} catch (Exception $e) {
print $e . "\n";
} finally {
print "start finally statements" . "\n";
}
<?php
try {
print "start try statements" . "\n";
throw new Exception("___some_exception___");
throw new Error("___some_error___");
} catch (Exception $e) {
print "start exception handler" . "\n";
print $e . "\n";
} catch (Error $e) {
print "start error handler" . "\n";
print $e . "\n";
}
<?php
try {
print "start try statements" . "\n";
throw new Exception("___some_exception___");
} finally {
print "start finally statements" . "\n";
}