PHP: 制御構文

PHP: 制御構文

September 10, 2020
PHP
PHP

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

elseifelse 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";
}