【PHPの基礎知識④】プログラム構造・構文

アイキャッチ画像 PHP
PHP
この記事は約11分で読めます。
Recommended Articles

【PHPの基礎知識④】プログラム構造・構文

条件分岐

IF

  • 書式1
    if (条件式①) {
     ①の条件を満たすときに実行する処理
    }
  • 書式2
    if (条件式①) {
      ①の条件を満たすときに実行する処理
    } else {
      ①の条件を満たさないときに実行する処理
    }
  • 書式3
    if (条件式①) {
      ①の条件を満たすときに実行する処理
    } elseif (条件式②) {
      ①の条件を満たさないかつ②の条件を満たすときに実行する処理
    } else {
      ①②ともに条件を満たさないときに実行する処理
    }

if文は「aならばbを実行する」という構文を組み立てるときに使います。単純に「aならばbを実行する」という条件で収まらなければ、書式2や書式3の通り、elseやelseifと組み合わせて複合する条件式を組み立てます。

「aならばbを実行する」は「aという条件式がTRUEのときはbを実行する」と同じです。たとえば「if($a>=10){」は「$a>=10という条件がTRUEのときは」という条件です。よって「変数$boolがTRUEのときは」という条件を記述するときは「if($bool==TRUE){」と「==TRUE」を記述する必要はなく「if($bool){」と記述すれば済みます。

使用例
  • ifを使って条件分岐する
    $int = 100;
    if ( $int > 10 ) {
        echo "abc"; →出力される
    }
  • if ~ else を使って条件分岐する
    $int = 100;
    if ( $int < 10 ) {
        echo "123";
    } else {
        echo "abc"; →出力される
    }
  • if ~ elseif ~ else を使って条件分岐する
    $int = 100;
    if ( $int < 10 ) {
        echo "123";
    } elseif ( $int > 1000 ) {
        echo "xyz";
    } else {
        echo "abc"; →出力される
    }
IFとともに使われる関数

if文での条件の組立ては「if ($int > 10)」のように変数と値を比較したり、TRUEが戻り値となる関数などを使います。

  • if文の条件式で良く使われる関数と主な用途
    isset変数がセットされていれば処理する
    empty変数が空でなければ処理する
    is_array変数が配列ならば処理する
    count配列を指定数以上の要素があれば処理する
    preg_match変数が指定した正規表現パターンにマッチすれば処理する
    strlen変数の長さが指定数以上あれば処理する
    file_existsファイルが存在すれば処理する
    defined定数が定義されている時は処理する
    substr指定値が変数に存在すれば処理する
    in_array指定値が配列に存在すれば処理する

    isset関数やempty関数のように戻り値がTRUEとなる関数だけではなく、数値を返すcount関数やstrlen関数も良く使われ、これらの関数から返される数値を元に条件式が組み立てられています。

SWITCH

switch(変数) {
  case 変数の:
    条件を満たすときの処理
    break;
  default:
    いずれの条件も満たさないときの処理
}
switch文は、if文と同様、条件によって処理を分岐したいときに使います。case文を使って条件を指定します。case文のいずれの条件を満たさないことも考えられるときはdefaultで既定の処理を記述します。if文による分岐が多くなってしまうときにswitch文を使うと条件がわかりやすくなり、見やすいプログラムになります
使用例
$int = 2;
switch ($int){
  case 1:
    echo "変数値は1です。";
    break;
  case 2:
    echo "変数値は2です。"; →出力される
    break;
  default:
    echo "どちらでもありません。";
}

ループ(処理を繰り返す)

WHILEループ

while文は「aを満たす間、bを繰り返す」という構文を組み立てるときに使います。

  • 書式1
    while (条件式) {
      条件を満たす間、実行する処理
    }

    <使用例>

    $fp = fopen("aaa.txt", "r");
    while (!feof($fp)) {
      ・・・
    }
  • 書式2
    while (条件式) :
      条件を満たす間、実行する処理
    endwhile;

    <使用例>

    $fp = fopen("aaa.txt", "r");
    while (!feof($fp)) :
      ・・・
    endwhile;
  • 書式3
    do {
      条件を満たす間、実行する処理
    }while (条件式) ;

    <使用例>

    $i = 0;
    do {
      $i++;
      echo $i;
    } while ( $i < 9 );
    実行結果 123456789

FORループ

  • 書式1
    for (条件式) {
      条件を満たす間、実行する処理
    }

    <使用例>

    for ( $i = 0; $i < 10; $i++ ) {
      echo $i;
    }
    実行結果 0123456789

    <解説>
     この例はループカウンタ変数iが0から始まり9になるまでループ(繰り返し)します。条件式の「$i = 0; $i < 10; $i++」はセミコロン「;」で3つのパートに区切られています。ループに入るときに最初のパート[$i]=0
    が実行され、カウンタに初期値がセットされます。繰り返しを開始する前に2番目のパート「$i < 10」で処理を継続するかどうか判断されます。繰り返す処理が実行された後、最後のパート「$i++」が実行されループカウンタ変数iが加算されます。この例では9まで出力した後、ループカウンタ変数iが加算されて10となり次回の実行時には「$i < 10」を満たさなくなるのでループを抜けます。

  • 書式2
    for(条件式):
      条件を満たす間、実行する処理
    endfor;

    <使用例>

    for ( $i = 0; $i <10; $i++ ):
      echo $i;
    endfor;
    出力結果 0123456789

FOREACH

foriach文は、配列のデータを対象に繰り返し処理を実行できます。配列のデータをまとめて処理したいときに使います。

  • 書式1
    foreach (配列 as 配列の値){
      処理
    }

    <使用例>

    $array = array("あ", "い", "う", "え", "お");
    foreach ($array as $value) {
      echo $value;
    }
    出力結果 あいうえお
  • 書式2
    foreach (配列 as 配列のインデックス => 配列の値){
      処理
    }

    <使用例>

    $array = array("a" => "あ", "b" => "い", "c" => "う");
    foreach ($array as $key => $value) {
      echo $key.$value;
    }
    出力結果 aあbいcう

BREAK(ループや条件分岐を終了する)

break文は制御構造による処理を終了します。for文やwhile文はループを終了します。switch文では、これ以降の条件を判断せずに終了します。

  • break文でforループを抜ける使用例
    $i = 0;
    for (;;) {
      if ($i > 9) {
        break; → forループを抜ける
      }
      echo $i;
      $i++;
    }
    出力結果 0123456789

    <解説>
    for(条件式)で指定する条件を省略して、ループの処理内部で break文によってループを抜けることができます。

CONTINUE(ループや処理をスキップする)

continue文はループ中に現在の繰り返し処理をスキップして次のループに移動します。

for ( $i = 0; $i < 5; $i++ ) {
  if ($i == 1) {
    continue; →ループをスキップ
  }
  echo $i;
}
実行結果 0234

ファイルを読み込む

INCLUDE

include文はファイルを読み込んで評価します。ファイルが存在しないときはWarningメッセージが出力されますが、処理は継続します。読み込むファイルの場所はphp.iniのinclude_pathの設定を元に探されます。読み込むファイルを特定のディレクトリに配置するときは、このinclude_pathを設定しておくと良いでしょう。

  • ファイルを読み込む文例
    include("abc.php"); 
    include "abc.php"; 

     ①②どちらも同じです。

【PHP】 php.ini 設定オプション一覧
php.iniの格納場所の確認方法や推奨設定などを解説しています。廃止されてた設定については、そのPHPバージョン、代替設定についても解説しています。
インクルードファイルへの直接アクセスを回避する

インクルードするファイルは直接アクセスするものではありませんが、検索エンジンの巡回ロボットから等、なんらかの事情でインクルードファイルに直接アクセスされることも考えられます。このような場合は処理を中止するようなコードを記述しておくことで、システムの誤動作やインクルードファイルの目的以外での利用を回避することができます。

記述するコードとして定義済の「__FILE__」(現在のファイル)と、環境変数「$_SERVER["PHP_SELF"]」(現在のURL)を比較する必要があります。次の使用例をみてみましょう。

  • test.php
    echo "<p>__FILE__:".basename(__FILE__)";
    echo "<p>PHP_SELF:".$_SERVER["PHP_SELF"];

    <解説>
     このファイルを任意のスクリプトでインクルードした場合、__FILE__と$_SERVER["PHP_SELF"]の出力結果は次のようになります。
     <出力結果>(インクルードされた場合)

    __FILE__:test.php
    PHP_SELF:/web/phpdic/abc.php

     一方、test.phpをそのまま表示、つまり直接アクセスされた場合は、次のように同じ「test.php」を含む値となります。
     <出力結果>(直接アクセスされた場合)

    __FILE__:test.php
    PHP_SELF:/web/phpdic/test.php

     このようにインクルードファイルとして使用された場合と直接アクセスされた場合はで状況が異なります。これを利用して文字列比較関数を使って2つの値を比較することで直接アクセス時に処理を終了させることができます。

  • インクルードファイルへの直接アクセスを回避する具体例
    if (stristr($_SERVER["PHP_SELF"],basename(__FILE__))){
      die("直接アクセスされましたので終了します。");
    }

INCLUDE_ONCE(ファイルを1度だけ読み込む)

include_once文はinclude文と同様、ファイルを読み込んで評価します。既にファイルが読み込まれているときは再度読み込みをしない点がinclude文との違いです。

  • ファイルを1度だけ読み込む文例
    include_once("aaa.php"); 
    include_once "aaa.php"; 

     ①②どちらも同じです。

REQUIRE

require文はファイルを読み込んで評価します。ファイルが存在しないときは処理は停止します。

  • ファイルを読み込む文例
    require("aaa.php"); 
    require "aaa.php"; 

     ①②どちらも同じです。

REQUIRE_ONCE(ファイルを1度だけ読み込む)

require_once文はrequire文と同様、ファイルを読み込んで評価します。既にファイルが読み込まれている時は再度読み込みをしない点が、require文との違いです。

  • ファイルを1度だけ読み込む文例
    require_once("aaa.php"); 
    require_once "aaa.php"; 

     ①②どちらも同じです。

TRY~CATCH(例外を処理する)

try~catch文は、例外をハンドリングするときに使います。tryブロックには、例外が発生する可能性がある処理を記述し、例外発生時の処理をcatchブロックに記述します。

try {
  例外が発生する可能性がある処理
}
catch (Exception $e) {
  例外発生時の処理
}
 <使用例>
  • 例外を処理する
    try {
      if (!@$a = faile("aaa.txt")) {
        throw new Exception("ファイルなし");
      }
    }
    catch (Exception $e) {
       echo $e->getMessage(); 
    }

    <解説>
     throw文で作成され、catchブロックに渡されるExceptionオブジェクトに対し、getMessegesメソッドを実行して例外メッセージを取得したり、getFileメソッドを実行して例外の発したファイル名を取得することができます。

関連リンク

次の章へ進む
【PHPの基礎知識⑤】ユーザー定義関数
functionを使って定義されるユーザー定義関数は、ほとんどのWebアプリケーションで使われています。このユーザー定義関数を作成する上で必要最低限守らなければならないルールを解説します。
PHPトップページ
PHP入門 & 関数リファレンス
PHPの初心者からベテランまで活用できるページです。初めての方はもちろん、もう一度基礎から学びなおしたい方は、基礎知識のページを順に読んで理解しましょう。ベテランの方向けには、関数の書式・パラメーターを調べられる構成になっています。PHPプログラム作成時にご活用下さい。
Recommended Articles