ここではPHPの基本について簡単ですが解説します。随時更新もしていきたいと思います。

[言語リファレンス] [PHPの関数] [Webフォームのコントロール] [クラス定義] [エラー処理]

言語リファレンス
 
PHPの記述方法
1) 開始タグと終了タグ
PHPは開始タグと終了タグの間にPHPスクリプトを記述していきます。 種類も4種類あり下記の通りとなります。

 例1)
  <?php
   PHPのスクリプトを記述
  ?>

 例2)
  <?
   PHPのスクリプトを記述
  ?>

 例3)
  <script language="php">
   PHPのスクリプトを記述
  </script>

 例4)
  <%
   PHPのスクリプトを記述
  %>


どれが一番いいかは?ですが、当サイトではこの後、PEARライブラリーの解説もすることになっていますので PEAR標準コーディングとなっている<?phpを使用します。

2) コメントの記述
<1行のみをコメントする方法>
 //で記述します。 //以降に記述した内容がコメント扱いとなります。

<複数行をコメントする方法>
  /**/ の間にコメント内容を記述します。
 また/**/の間に/**/を入れ子でコメントすることは出来ません。

  <?php
    //この行はコメントです。
    print "PHP TEST1";
    //print "PHP TEST2";
    /*
      この行はコメントです。
      この行もコメントです。
    */
    /*
      print "PHP TEST3";
      print "PHP TEST4";
    */
    print "PHP TEST5";
  ?>

実行結果は"TEST1"と"TEST5"が表示されます。
3) 記述の終わり
PHPの文の終わりは必ずセミコロン(;)をつけます。漏れがあるとどういう動作をするか保障はされません。出来ません。

  <?php
    print "PHP TEST1";
  ?>

4) 文字の表示
print文を使います。

  <?php
    print "PHP TEST1";
  ?>

5) ファイルの拡張子
PHPのファイル拡張子は"php"です。拡張子がhtmlのファイルにphpの処理を記述しても動作は致しません。
例)index.php

PHPで使用する変数と型
変数の宣言はドル記号の後に変数名が続く形式で表されます。 変数名は大文字小文字を区別します。
有効な変数名は文字またはアンダースコア/任意の数の文字/ 数字/アンダースコアで表現します。

また通常、C言語などで変数を定義する場合、その型が文字列型なのか整数型なのかをchar/int/long等の型定義しますが、PHPでは変数を定義する場合、型の定義はありません。
変数を宣言して値が代入された場合にはじめてその性質の型を持ちます。


1) 文字列
文字列の表現は下記の3種類あります。
 
  <?php

    //文字列(ダブルクォーテーションを使用した場合)
    $stringx = "文字列はダブルクォーテーションで括る";
    print $stringx;

    //文字列(シングルクォーテーションを使用した場合)
    $stringy = '文字列はシングルクォーテーションで括る';
    print $stringy;

    //文字列(EODヒアドキュメントを使用した場合:正しい例)
    $stringz = <<<EOD
EODヒアドキュメントで文字列を括る
EOD;    

    print $stringz;

    //文字列(EODヒアドキュメントを使用した場合:悪い例。実行時エラーとなる)
    $stringz = <<<<EOD  EODヒアドキュメントで文字列を括る  EOD;    
    print $stringz;

  ?>
なおダブルクォーテーションは変数やエスケープシーケンスを解釈しますがシングルクォーテーションだとそのまま出力されます。
 エスケープシーケンス     意 味
 \n  ラインフィード(LF)
 \r  キャリッジリターン(CR)
 \t  タブ文字
 \\  バックスラッシュ

2) 整数
整数のサイズはプラットフォームに依存しますが、 約20億(32ビット符号付)が一般的な値です。範囲外の数を指定した場合、floatとして解釈されます。
 
  <?php

    //整数(正の数)
    $intx = 123456;
    print $intx;

    //整数(負の数)
    $inty = -123456;
    print $inty;

  ?>

3) 論理型
真偽の値を表 します。この値は、TRUEまたはFALSEのどちらかになります。
 
  <?php

    //論理型(TRUE)
    $booleanx = TRUE;
    //論理型(FALSE)
    $booleany = FALSE;
    if ( $booleanx ){
      print "booleanxはTRUEです!";
    }else{
      print "booleanxはFALSEです!";
    }

    if ( $booleany == FALSE ){
      print "booleanyはFALSEです!";
    }else{
      print "booleanyはFALSEです!";
    }

  ?>

4) 浮動小数点
 
  <?php

    //浮動小数点(正の数)
    $floatx = 123456.78;
    print $floatx;

    //浮動小数点(負の数)
    $floaty = -123456.78;
    print $floaty;

  ?>

5) 配列
配列型はArray()で宣言します。宣言だけでは使用出来ません。値は動的に増やすことが可能です。
  <?php

    //配列の宣言
    $st_val = array();
    //配列は0番目から設定
    $st_val[0] = "Apache";
    $st_val[1] = "PHP";
    $st_val[2] = "MySQL";
    $i = 0;
    while ($i < 3) {
        echo "st_val[" . $i . "] = " . $st_val[$i];
        print "<br>";
        ++$i;
    }

  ?>
結果は
    st_val[0] = Apache
    st_val[1] = PHP
    st_val[2] = MySQL
となります。また添字を省略しても配列の宣言時に値を代入しても結果は同じになります。
  <?php

    //配列の宣言
    $st_val = array();
    //配列は0番目から設定
    $st_val[] = "Apache";
    $st_val[] = "PHP";
    $st_val[] = "MySQL";
    $i = 0;
    while ($i < 3) {
        echo "st_val[" . $i . "] = " . $st_val[$i];
        print "<br>";
        ++$i;
    }

  ?>

  <?php

    //配列の宣言と値の代入
    $st_val = array("Apache","PHP","MySQL");
    $i = 0;
    while ($i < 3) {
        echo "st_val[" . $i . "] = " . $st_val[$i];
        print "<br>";
        ++$i;
    }

  ?>

2次元配列に挑戦です。会員番号/会員姓/会員名の3つの項目を1レコードとして配列に設定してみます。
  <?php

    //配列の宣言
    $st_val = array();
    //配列は0番目から設定
    $st_val[0][0] = "00001";
    $st_val[0][1] = "山田";
    $st_val[0][2] = "太郎";
    $st_val[1][0] = "00002";
    $st_val[1][1] = "鈴木";
    $st_val[1][2] = "花子";
    $st_val[2][0] = "00003";
    $st_val[2][1] = "田中";
    $st_val[2][2] = "一郎";
    $i = 0;
    while ($i < 3) {
        echo "st_val[" . $i . "] = " . $st_val[$i][0] .
                                       " ". $st_val[$i][1] .
                                      " " . $st_val[$i][2];
        print "<br>";
        ++$i;
    }

  ?>
結果は
    st_val[0] = 00001 山田 太郎
    st_val[1] = 00002 鈴木 花子
    st_val[2] = 00003 田中 一郎
となります。

次は連想配列です。値をキー/添字として設定することも出来ます。ここでは会員番号として配列に設定してみます。
  <?php

    //配列の宣言
    $st_val = array();
    //配列は0番目から設定
    $st_val["00001"]["nm_sei"] = "山田";
    $st_val["00001"]["nm_mei"] = "太郎";
    $st_val["00002"]["nm_sei"] = "鈴木";
    $st_val["00002"]["nm_mei"] = "花子";
    $st_val["00003"]["nm_sei"] = "田中";
    $st_val["00003"]["nm_mei"] = "一郎";
    echo "会員番号:00001の名前は =" . $st_val["00001"]["nm_sei"] . " " . $st_val["00001"]["nm_mei"];
    print "<br>";
    echo "会員番号:00002の名前は =" . $st_val["00002"]["nm_sei"] . " " . $st_val["00002"]["nm_mei"];
    print "<br>";
    echo "会員番号:00003の名前は =" . $st_val["00003"]["nm_sei"] . " " . $st_val["00003"]["nm_mei"];
    print "<br>";
    
  ?>
結果は
    会員番号:00001の名前は 山田 太郎
    会員番号:00002の名前は 鈴木 花子
    会員番号:00003の名前は 田中 一郎
となります。

配列宣言時に連想配列にする場合は下記の通りです。
  <?php

    //配列の宣言
    $st_val = array("00001" => "山田 太郎", "00002" => "鈴木 花子", "00003" => "田中 一郎");
    //配列は0番目から設定
    echo "会員番号:00001の名前は =" . $st_val["00001"];
    print "<br>";
    echo "会員番号:00002の名前は =" . $st_val["00002"];
    print "<br>";
    echo "会員番号:00003の名前は =" . $st_val["00003"];
    print "<br>";
    
  ?>
結果は
    会員番号:00001の名前は 山田 太郎
    会員番号:00002の名前は 鈴木 花子
    会員番号:00003の名前は 田中 一郎
となります。

PHPで使用する定数
Cの#defineやVBのCONSTのような定数をPHPで使用する場合はdefine()関数を使用して定数を定義します。定数が一度定義されると、変更するこ とはできません。
また論理型、整数型、浮動小数点型、文字列型のみが定数の中に含むこと が可能です。
  <?php

    //文字列の定義
    define("CONST_TITLE", "PHP Learning");
    //文字列の定義
    define("CONST_MAX_CNT", 10);

    print CONST_TITLE;

    print CONST_MAX_CNT;

  ?>
 
PHPでは既に予約語として使用されている定数があります。
    定 数        意 味
 PHP_VERSION  PHPのバージョン
 PHP_OS  PHPが稼動中のOS
 TRUE  論理型で真を表す
 FALSE  論理型で偽を表す
 NULL  NULL値を表す

PHPで使用する演算子
1) 代数演算子
代数演算子とは数値の計算(加算/減算/乗算/割算/剰余)で使用する演算子
  <?php

    $intx = 17;
    $inty = 4;

    //@加算
    print $intx + $inty;

    //A減算
    print $intx - $inty;

    //B乗算
    print $intx * $inty;

    //C割算
    print $intx / $inty;

    //D剰余
    print $intx % $inty;

  ?>
結果は1)21、2)13、3)68、4)4.25、5)1となります。

2) 比較演算子
比較演算子とは、二つの値を比較します。
 
  <?php

    $stringx = "10";
    $stringy = "15";
    $stringz = "10";

    $intx = 10;
    $inty = 15;

    $intz = 3;

    //@等しい(==:等しい時に TRUE。)
    if ($stringx == $stringz){
      print "stringxとstringzは等しいです!";
    }else{
      print "stringxとstringzは等しくないです!";
    }

    //A等しい(==:等しい時に TRUE。)
    if ($stringx == $intx){
      print "stringxとintxは等しいです!";
    }else{
      print "stringxとintxは等しくないです!";
    }

    //B等しい(===:等しく同じ型のとき時に TRUE。)
    if ($stringx === $stringz){
      print "stringxとstringzは等しく同じ型です!";
    }else{
      print "stringxとstringzは等しくないか同じ型ではありません!";
    }

    //C等しい(===:等しく同じ型のとき時に TRUE。)
    if ($stringx === $intx){
      print "stringxとintxは等しく同じ型です!";
    }else{
      print "stringxとintxは等しくないか同じ型ではありません!";
    }

    //D等しくない(!=:等しくない時に TRUE。)
    if ($stringx != $stringy){
      print "stringxとstringyは等しくないです!";
    }else{
      print "stringxとstringyは等しいです!";
    }

    //E等しくない(<>:等しくない時に TRUE。)
    if ($stringx <> $stringy){
      print "stringxとstringyは等しくないです!";
    }else{
      print "stringxとstringyは等しいです!";
    }

    //Fより少ない(<:より少ない時に TRUE。)
    if ($intx < $inty){
      print "intxはintyより少ないです!";
    }else{
      print "intxはintyと等しいかそれ以上です!";
    }

    //Gより少ない(>:より多い時に TRUE。)
    if ($intx > $intz){
      print "intxはintzより多いです!";
    }else{
      print "intxはintzと等しいかそれ以下です!";
    }

    //Hより少ないか等しい(<=:より少ないか等しい時に TRUE。)
    //Iより多いか等しい(<=:より多いか等しい時に TRUE。)
  ?>

3) インクリメント/デクリメント
カウント等でよく使用するインクリメント/デクリメント はC 言語形式の加算子/減算子(前置・後置ともに)をサポートします。
  <?php

    $intx = 0;
    //@前置加算子
    print $intx++;  //結果は0です。
    print $intx;  //結果は1です。

    $intx = 5;
    //A後置加算子
    print ++$intx;  //結果は6です。
    print $intx;  //結果は6です。

    $intx = 0;
    //B前置減算子
    print $intx--;  //結果は0です。
    print $intx;  //結果は-1です。

    $intx = 5;
    //C後置減算子
    print --$intx;  //結果は4です。
    print $intx;  //結果は4です。

  ?>

4) 文字列演算子
文字列の連結には文字列演算子を使用します。
  <?php

    $stringx = "PHP ";
    $stringy = "TEST ";
    $stringz = "OK";

    //@結合演算子は.(ドット)を使用します
    $stringx = $stringx . $stringy;
    print $stringx;  //結果はPHP TESTです。

    $intx = 5;
    //A結合代入演算は.(ドット)=を使用します
    $stringx .= $stringz;
    print $stringx;  //結果はPHP TESTです。

  ?>

PHPで使用する制御構造
1) if文とelse文
C言語に似たif構文が使用されます。
  <?php

  if ($a > $b) {
      echo "aはbより大きい";
  } elseif ($a == $b) {
      echo "aはbと等しい";
  } else {
      echo "aはbより小さい";
  }

  ?>

2) while文
while (式){ 処理 } 又は while (式): 処理 endwhile; <-- 式がTrueの条件満たす場合処理を継続します。
  <?php

  $i = 0;
  while ($i < 10) {
      echo "i = " . $i;
      print "<br>";
      ++$i;
  }

  ?>
結果はi=0〜9まで出力されます。

3) for文
for (式1; 式2; 式3){ 処理 }
・式1は、ループ開始時に無条件に 評価(実行)されます。
・式2は、各繰り返しの開始時に式2が評価され、その式の値がTRUEが場合、ループは継続され、
 括弧内の処理が実行されます。
 値がFALSEの場合、ループの 実行は終了します。
・式3は、各繰り返しの後、式3が評価(実行)されます。
  <?php

  for ($i = 0; $i < 10; $i++) {
      echo "i = " . $i;
      print "<br>";
  }

  ?>
結果はi=0〜9まで出力されます。

4) foreach文
foreach(array_expression as $value) 又は foreach(array_expression as $key => $value)
  <?php

    //配列の宣言
    $st_val = array();
    //配列は0番目から設定
    $st_val[0] = "Apache";
    $st_val[1] = "PHP";
    $st_val[2] = "MySQL";
    foreach( $st_val as $temp_val) {
        echo "st_val[] = " . $temp_val;
        print "<br>";
        ++$i;
    }

  ?>
結果は
    st_val[] = Apache
    st_val[] = PHP
    st_val[] = MySQL
となります。

5) break
breakは、現在実行中の for, foreach, while, do-while, switch構造の実行を終了します。
  <?php

    $i = 1;
    while ( TRUE ) {
        if ( $i > 3 ) {
            break;
        }
        print "i = " . $i;
        print "<br>";
        ++$i;
    }

  ?>
結果は
    i = 1
    i = 2
    i = 3
となり3行出力後にbreakによりWhileのループを終了します。

6) continue
continueは、ループ構造において現在の繰り返しループ の残りの処理をスキップし、条件式を評価した後に 次の繰り返しの最初から実行を続けるために使用されます。
  <?php

    $i = 0;
    while ( TRUE ) {
        ++$i;
        if ( $i > 5 ) {
            break;
        }
        if ( $i < 2 ) {
            continue;
        }
        print "i = " . $i;
        print "<br>";
    }

  ?>
結果は
    i = 2
    i = 3
    i = 4
    i = 5
となります。

7) switch文
同じ変数を異なる値と比較し、値に応じて異なったコードを実行したい場合、ケースが多くなる場合は if文よりもswitch文を用いて処理を記述したほうが見た目上、大変わかりやすくなります。
  <?php

    $i = 5;
    switch ($i) {
        case 0:
            print "iは0です";
            break;
        case 1:
            print "iは1です";
            break;
        case 2:
            print "iは2です";
            break;
        default:
            print "iは0/1/2以外です";
    }

  ?>

8) require文とinclude文
どちらも指定したファイルを読み込み、評価します。
include()はWarning(警告)を出力しますが、require()はFatal Error(致命的エラー)となり処理続行不可となります。 require_once()とinclude_once()はどちらも1回だけrequire()またはinclude()と同じ処理をします。
  <?php

    //データベースへの接続
    require("/DB/Connect.php");

    //共通変数の取込
    require_once("/Cmn/Common.php");

  ?>
 

ユーザー定義関数
他の言語と同様にPHPでもスクリプト内で関数の定義が出来ます。 関数呼び出し時に引数を値渡し/参照渡しで指定することも出来ますし戻り値を返すことも出来ます。
1) 定義方法
function($変数1,$変数2・・・){
    処理記述;
    return $戻り値;
}
引数を値渡しで関数を呼び出した場合
  <?php

    //引数を値渡しで関数を呼び出した場合の例
    $cnt = 1;
    ataiwatasi($cnt);
    print "関数呼出後のcnt = " . $cnt;  //出力結果は1となります
    print "<br>";

    function ataiwatasi($cnt){
        $cnt = $cnt + 1;
        print "関数内でのcnt = " . $cnt;  //出力結果は2となります
        print "<br>";
    }

  ?>

引数を参照渡しで関数を呼び出した場合(引数に&をつけます)
  <?php

    //引数を参照渡しで関数を呼び出した場合の例
    $cnt = 1;
    sansyouwatasi(&$cnt);
    print "関数呼出後のcnt = " . $cnt;  //出力結果は2となります
    print "<br>";

    function sansyouwatasi($cnt){
        $cnt = $cnt + 1;
        print "関数内でのcnt = " . $cnt;  //出力結果は2となります
        print "<br>";
    }

  ?>

PHPの開始終了タグが分かれていても問題なく動作します。
  <?php

    //引数を参照渡しで関数を呼び出した場合の例
    $cnt = 1;
    sansyouwatasi2(&$cnt);
    print "関数呼出後のcnt = " . $cnt;  //出力結果は2となります
    print "<br>";

    }

  ?>

  <?php

    function sansyouwatasi2($cnt){
        $cnt = $cnt + 1;
        print "関数内でのcnt = " . $cnt;  //出力結果は2となります
        print "<br>";
    }

  ?>

スーパーグローバル変数
1) 種類
9つありすべて連想配列として利用します。
    変数       意 味       内 容
 $_SERVER  サーバー変数 Webサーバーの実行環境に直接関係する変数を格納
 $_ENV  環境変数 環境によりスクリプトに指定される変数を格納
 $_GET  HTTP GET変数 送信フォームからSUBMITされた値を格納
 $_POST  HTTP POST変数 送信フォームからSUBMITされた値を格納
 $_COOKIE  HTTP クッキー変数  
 $_FILES  HTTP ファイルアップロード変数 アップロードされたファイルや名称を格納
 $_SESSION  セッション変数 スクリプトのセッションに現在登録されている変数
 $_REQUEST  リクエスト変数  
 $GLOBALS  グルーバル変数 カレントのスクリプト上でグローバルスコープされている、すべての変数を格納した連想配列


Copyright (C)2006 TwoNess,inc. All rights reserved.