次のページ 前のページ 目次へ

PHP入門者 HOWTO

Yoshio Shimamura <yoshios@green.ocn.ne.jp>

v1.0, 18 July 2000
この文書は、PHP入門者用の簡易マニュアルです。 この文書の最新版は http://hp.vector.co.jp/authors/VA004572/index.html から入手可能です。

1 概要

2 型

3 変数

4 定数

5 式

6 演算子

7 制御構造

8 関数


1 概要

1.1 PHPって何?

PHP(Hypertext Preprocessor)はサーバサイドのHTML埋め込み型スクリプト言語です。 <?と?>で囲まれた中に書きます。

1.2 最初に作成するサンプル

お約束の「ハロー版」です。
<? echo "Hello! PHP3!"; ?>

1.3 ちょっと複雑なサンプル

各文はセミコロンで終了する。コメントはC++と同じものが使用できる。C型のコメントは、ネストしてはいけない。
<?
  /*
  コメント
  */
  echo "Hello! PHP3!"; // コメント
?>

2 型

2.1 整数

整数は、次の構文により指定できます。

$a = 1234; # 10進数 $a = -123; # 負の数 $a = 0123; # 8進数 (10進数の 83 と等価) $a = 0x12; # 16進数 (10進数の18と等価)

2.2 文字列

文字列は、2組のデリミタの1つを用いて指定できます。 文字列が2重引用符(")で括られた場合, 文字列の中の変数は展開されます。 (ただし、いくつかの解釈時の制約を受けます) C や Perl と同じく以下のようにバックスラッシュ文字 ("\") を特別な文字を指定するために使用することができます。

エスケープされた文字

他の文字をエスケープすることも可能ですが、 警告レベルを最高にした場合には警告が発生します。 文字列を区切る2番目の方法はシングルクオート文字("'")を使う方法です。 ある文字列が引用符で括られている場合、 理解されるエスケープ文字は、"\\" および "\'" のみです。 引用符とバックスラッシュを引用符で括られた文字列で 使用可能とする際に便利なようになっています。 変数は、引用符で括られた文字列の中では展開されません。

2.3 配列

配列はハッシュテーブル(連想配列) スカラー配列(ベクトル)のどちらとしても動作します。

1次元の配列

PHP は、スカラーおよび連想配列を共にサポートします。 実際、両者の間に違いはありません。 配列は、list またはarray で作成することもできますし、 配列の各要素の値を明示的にセットすることにより作成することもできます。
$a[0] = "abc"; 
$a[1] = "def"; 
$b["foo"] = 13;
配列に値を加える操作だけでも配列を作成することができます。 空の角括弧で配列変数に値を代入した場合、その値は配列の最後の要素として 追加されます。
$a[] = "hello"; // $a[2] == "hello"
$a[] = "world"; // $a[3] == "world" 
配列はソートしたい型に応じて asort、 arsort、 ksort、 rsort、sort、 uasort、 usort、 uksort 関数によりソートすることが可能です。 count 関数を用いて、ある配列の 要素数をカウントすることができます。 next と prev 関数を 用いて配列の中で移動することができます。 他に配列の中での移動法として一般的なのは、 each 関数です。 多次元配列 多次元配列の指定は簡単です。 配列の各次元毎に後ろに他の[キー]を付加します。
$a[1]      = $f;               # 1次元の配列の例
$a["foo"]  = $f;   

$a[1][0]     = $f;             # 2次元
$a["foo"][2] = $f;             # (数値添字と連想添字を混用できます)
$a[3]["bar"] = $f;             # (数値添字と連想添字を混用できます)

$a["foo"][4]["bar"][0] = $f;   # 4次元!
PHP3 では、直接文字列の中で多次元配列を参照することができませんでした。 例えば、次の例では望む結果を得られません。
 
 $a[3]['bar'] = 'Bob';
 echo "これは動作しません: $a[3][bar]";
PHP3 では、上の例は、 これは動作しません: Array[bar] を出力します。 しかし、文字列結合演算子を使用して、これを解決することができます。
 $a[3]['bar'] = 'Bob';
 echo "これは動作します: " . $a[3][bar];
しかし、PHP4 では(文字列の中で)配列参照を波括弧で囲むことにより この問題は回避されました。
 $a[3]['bar'] = 'Bob';
 echo "これは動作します: {$a[3][bar]}";
多次元配列にいろいろな手法で値を入れることができます。 最も技巧的なのは、連想配列に関する array コマンドの の使用法です。 2つのコードは、1次元配列に同じ手法で代入しています。
 
# 例 1:

$a["color"]	= "red";
$a["taste"]	= "sweet";
$a["shape"]	= "round";
$a["name"]	= "apple";
$a[3]		= 4;


# 例 2:
$a = array(
     "color" => "red",
     "taste" => "sweet",
     "shape" => "round",
     "name"  => "apple",
     3       => 4
);
array 関数は多次元配列に関してネストして 使用することができます。
 array(
          "color"  => "red",
          "taste"  => "sweet",
          "shape"  => "round"
     ),
     "orange"  => array(
          "color"  => "orange",
          "taste"  => "tart",
          "shape"  => "round"
     ),
     "banana"  => array(
          "color"  => "yellow",
          "taste"  => "paste-y",
          "shape"  => "banana-shaped"
     )
);

echo $a["apple"]["taste"];    # "sweet" を出力します
?>

3 変数

3.1 変数

変数は、$変数名で表す。変数名は、大文字、小文字を区別する。
$var = "Hoge";
<?php
$foo = 'Bob';              // 値'Bob'を$fooに代入する。
$bar = &$foo;              // $fooを$barにより参照
$bar = "My name is $bar";  // $barを変更...
echo $foo;                 // $fooも変更される。
echo $bar;
?>

3.2 スコープ

変数のスコープは、その変数が定義されたコンテキストです。 ほとんどの PHP 変数は、スコープを1つだけ有しています。 このスコープの範囲は、includeやrequireにより読みこまれたファイルも 含みます。例えば、

$a = 1;
include "b.inc";

この例で、変数$aはインクルードされた b.inc スクリプトの中でも 利用可能です。 しかし、ユーザー定義の関数の中では変数の有効範囲はローカル関数の中となります。 関数の中で使用された変数はデフォルトで有効範囲が関数内部に制限されます。 例えば、

$a = 1; /* グローバルスコープ */ 

Function Test () { 
    echo $a; /* ローカルスコープ変数の参照 */ 
} 

Test ();

このスクリプトは、出力を全く行いません。 これは、echo 命令がローカル版の $a 変数を参照しているにもかかわらず、 このスコープでは値が代入されていないからです。

3.3 定義済変数

PHPは、実行する全てのスクリプトに定義済みの多くの変数を 提供します。しかし、これらの変数の多くは、 実行するサーバーの種類、サーバーのバージョンおよび設定、 その他の要素に依存しており、完全に記述することはできません。 これらの変数のいくつかはPHPをコマンドラインで実行した場合には 利用できません。

これらの要因はあるものの、Apache 1.3.6のデフォルトインストールを 行い、PHP3をモジュールとしてデフォルトインストールを行った状態で 定義済みの変数のリストを以下に示します。

全ての定義済み変数のリスト(そして他の多くの有益な情報)については、 phpinfoを参照(および使用)ください。

注意: このリストは、網羅的なものでも網羅的にしようとするものでもありません。 どんな定義済みの変数に自分のスクリプトからアクセス可能と期待できる のかに関するガイドラインであるに過ぎません。

Apache により設定される変数

これらの変数は、Apache Webサーバーにより 作成されるものです。他のWebサーバーを実行している場合には、 同じ変数が提供される保証はありません。いくつかの変数が 省略されたり、このリストにない別の変数が提供されている 可能性があります。 このリストにある変数の多くは、 CGI 1.1 の規約に 記述されており、他のWebサーバーでも利用可能であると期待することができます。

数は少ないですが、これらの変数のいくつかはPHPをコマンドラインで実行している時のみ 利用可能(または意味がある)であるということに注意して下さい。

環境変数

これらの変数は、PHPパーサが実行されている環境から PHP のグローバル変数領域にインポートされます。 その多くは、PHPを実行したシェルにより提供されたものであり、 システムが異なると恐らくシェルの種類も異なるので、固定したリストを 示すことはできません。定義済みの環境変数のリストについては、 使用するシェルのドキュメントを参照下さい。

CGI変数を含む他の環境変数は、PHPがサーバーモジュールとして実行 されているのか、CGIプロセッサとして実行されているのかに よらず設定されます。

PHP により定義される変数

これらの変数は、PHP自体により作成されます。

4 定数

4.1 定数の定義

PHP は、いくつかの定数を定義します。また、実行時に定数の定義を追加する 機構を提供します。 定数は変数と良く似ていますが、定数はdefine 関数を使って定義する必要があり、他の値に再定義することができないという 二つの違いがあります。

define 関数により定数の定義を追加することができます。 これらは定数であり、C 言語のマクロではないことに注意してください。 有効なスカラーデータのみが定数として表現可能です。

<?php
define("CONSTANT", "Hello world.");
echo CONSTANT; // outputs "Hello world."
?>

4.2 定義済定数

あらかじめ定義された定数(常に使用可能)を以下に示します。

E_* 定数は、エラーレポートレベルを設定するために通常 error_reporting 関数と共に使用されます。

例 8-2. __FILE__ および __LINE__ の使用

<?php
function report_error($file, $line, $message) {
    echo "An error occured in $file on line $line: $message.";
}

report_error(__FILE__,__LINE__, "Something went wrong!");
?>

5 式

式は、PHP における最も重要な基盤石です。PHPにおいては、 ほとんど全てのものは式で記述されます。 最も簡単で最も正確な式の定義は、"全ての式には値がある。" です。

考えられる簡単な例は、定数と変数です。 "$a = 5" と入力すると、$a に '5' を代入することになります。 '5' は、明らかに、 5 という値です。 言葉を変えると '5' は 5 という値を有する式なのです。 (この場合、'5' は整数定数です。)

この代入の後、$a の値は、5 であることが予想されます。 よって、$b = $a と書いた場合、$b = 5 と書いたのと 同じように動作することが予想されます。 言い換えると $a は 5 という値を持つ式なのです。 全てが正しく動作する場合、何が起こるかをこのことが正確に表現しています。

少しだけより複雑な式の例は、関数です。 例えば、次の関数を考えてみましょう。

function foo () {
    return 5;
}

あなたが関数の概念に慣れていると仮定すると (そうでない場合は、関数に関する章を参照下さい。)、 $c = foo() と入力することは、 $c = 5 と書くことと本質的に全く同じで あると予想されたかもしれません。この予想は、正しいです。 関数は、その返り値を値とする式なのです。 foo() は 5 を返すので、式 'foo()' の値は 5 です。 通常、関数は、決まった数だけを返すのではなく、何かを計算します。

もちろん、PHP の値は整数である必要はありませんし、 多くの場合、そうではありません。 PHP は、3 種類のスカラー型(整数、浮動小数点数、文字列)をサポートします。 (スカラーとは、配列とかと異なり、より小さな部分に'分割する'ことが できない値のことです。) PHP は、2種類の複合(非スカラー)型(配列とオブジェクト)もサポートします。 これらの型の値は、変数に代入することができ、 関数からの返り値とすることができます。

これまでのところ、PHP/FI 2 のユーザーは何も変わったところがないと 思ったことでしょう。 しかし、PHP は、他の多くの言語が行うのと同じ手法で、 更に多くの式を使用可能です。 PHP 3 は、ほとんど全てが式であるという意味で、式指向の言語です。 既に取り扱った '$a=5' という例について考えてみましょう。 この式には、整数定数の '5' と 5 に更新された $a の値という 2 つの値が現れているということに容易に気づくことでしょう。 しかし、実際には、ここにはもうひとつの値が含まれています。 それは、代入自体の値です。 代入式は、それ自体、代入値を評価します。 この場合、その値は 5 になります。 このことは、実際には、'$a = 5' は、それが何をするかによらず、 値 5 を有する式であることを意味します。 つまり、 '$b = ($a = 5)' のように書くことは、'$a = 5; $b = 5;' と書くのと 同様なのです。(セミコロンは、文の終わりを示します。) 代入は、右から左へ実行されるため、'$b = $a = 5' と書くことも 可能です。

式の配置に関する別の良い例は、前置、後置加算子、あるいは減算子です。 PHP/FI 2 と他の多くの言語のユーザーは、variable++ や variable-- といった表記法に慣れていることでしょう。 これらは、加算子および減算子です。 PHP/FI 2 においては、文 '$a++' は値を持ちませんでした。 (この文は、式ではありませんでした。) このため、この式に代入したり、なんらかの手法でこれを使用することが できませんでした。 PHP は、C 言語のようにこれらの式を同時に作ることにより 加算子、減算子の機能を拡張しました。 PHP においては、C 言語のように、 前置加算と後置加算という、2 種類の加算があります。 前置加算と後置加算は、両方とも、基本的には変数を増加させ、 変数に対する効果は同じです。 異なっているのは、加算する式の値です。 前置加算は、'++$variable' と書かれますが、 加算後の値を評価します。 (PHP はその値を読む前に変数を増加させるので、'前置加算(pre-increment)' という名前がついています。) 後置加算は、'$variable++' と書かれますが、加算される前の $variable の元の値を評価します。 (PHP は、その値を読んだ後に変数を増加させるので、 '後置加算(post-increment)' という名前がついています。)

比較演算子は、極めて標準的な式です 比較演算子は、0、1のどちらかを値とします。 この値の意味は、(それぞれ、) FALSE と TRUE です。 PHP は、 > (大なり)、>= (大なりイコール)、、= (イコール)、 < (小なりイコール)、、<= (小なりイコール) をサポートします。 これらの式は、if文のような条件式の内部で一般的に使用されます。

式の最後の例として、ここでは、演算子+代入式の複合演算式 を扱います。 既にご存知のように、$a に 1 を加えたい場合は、'$a++' または '++$a' と書くだけで十分です。 しかし、1より大きな数、例えば 3 を加えたい場合は、どうすればよいの でしょう? '$a++' を複数回使うこともできますが、当然これはあまり効率的で快適な 手法ではありません。 多くの場合は、'$a = $a + 3' と書かかれます。 '$a + 3' は、$a + 3 の値を評価し、$a に代入します。 この結果、$a に 3 が加えられます。 PHP においては、C のような他の言語と同様に、 この例をより短かく書くことができます。 これにより、より明確になり、同時に理解も迅速になります。 $a の現在の値に 3 を加える式は、 '$a += 3' と書くことができます。 この式の正確な意味は、 "$a の値を取得し、それに 3 を加え、$a に再代入しなさい。" です。 より短く、明確になっただけでなく、実行もより高速になります。 '$a =+ 3' の値は、通常の代入と同様に、代入された値です。 この値は 3 ではなく、$a に 3 を加えた加算値 (この値が、$a に代入された値です。)であることに注意して下さい。 '$a -= 5' ($a から 5 を引く)や '$b *= 7' ($b に 7 をかける)等のように、 全ての 2 項演算子は、この演算子+代入式のモードで使用することができます。

もう一種類、terniary 条件文という式がありますが、 他の言語で見たことがない場合には理解できないかもしれません。

$first ? $second : $third

最初の部分式の値が TRUE (非ゼロ)の場合、二番目の部分式が評価され、 この条件文の結果となります。 そうでない場合、三番目の部分式が評価され、この文の値となります。

本章のはじめで、様々な文の型について書くと言いましたが、 約束したように、式は、文なのです。 しかし、全ての式がひとつの文なわけではありません。 この場合、文は、'式'';' 、つまり式の後にセミコロンがついた形式です。 '$b=$a=5' において、$a=5 は有効な式ですが、自身を値とする文では ありません。しかし、'$b=$a=5;' は有効な文です。

最後に、有益な事項として式の論理値について説明します。 多くのイベント、主に条件付き実行とループにおいて、 式の特定な値には関心がないが、TRUE または FALSE のどちらを 意味するかに関心があるということがあります。 (PHP には、専用の論理型がありません。) PHP において式の真値は、perl に似た手法で計算されます。 全ての非ゼロ数値は TRUE (真)で、ゼロは FALSE (偽)です。 負の値は非ゼロであり、よって、TRUE とみなされることに注意して下さい! 空の文字列と文字列 "0" は FALSE ですが、その他の文字列は、TRUE です。 非スカラー値(配列とオブジェクト)に関しては、要素がない場合は FALSE と みなされ、その他は TRUE とみなされます。

PHP は、完全で強力な式の実装を提供します。 それを完全に記述することは、このマニュアルの範囲を超えています。 上記の例は、式とは何か、そして、便利な式をどうやって作るかということ に関して良いアイデアを与えるに違いありません。 本マニュアルの残りの部分では 'expr' というマークを使用しますが、 これは PHP の有効な式を意味します。

6 演算子

6.1 代入演算子

代入演算子の基本となるものは "=" です。 この演算子に関して最初に思い付く意味は、"等しい" であるかもしれません。 違います。 本当は、左オペランドに右オペランドの式の値を設定する ("得て代入する")ことを意味します。

代入式の値は、代入される値です。 つまり、"$a=3" の値は、3 です。 これにより、以下のようなトリッキーなことができるようになります。

 $a = ($b = 4) + 5; // $a は 9 に等しく、$b は 4 にセットされます。

全てのバイナリ演算子および文字列演算子に関して、 基本的な代入演算子に加えて "複合演算子" があります。 この演算子により、式の値を使用し、式の結果にその値をセットすることが できます。例:

$a = 3;
$a += 5; // $a を 8 にセットします。$a = $a + 5; と同じです。
$b = "Hello ";
$b .= "There!"; // $b を "Hello There!" にセットします。 $b = $b . "There!"; と同じです。

代入は、元の変数を新しい変数にコピーする(値による代入)ため、 片方の変数に対する変更はもう片方に影響を与えないということに注意して下さい。 この動作により、 密なループの内側で大きな配列のようなものをコピーする必要がある場合には 問題を生じる可能性があります。 PHP4 では、$var = &$othervar; 構文により 参照による代入をサポートしていますが、PHP3 ではサポートしません。 '参照による代入'は、両方の変数が同じデータを指し、コピーを行わないことを 意味します。

6.2 文字列演算子

文字列の演算子は2種類あります。最初のは結合演算子('.')で、 右引数と左引数を結合したものを返します。 2番目は、結合代入演算子('.=')です。詳細は、 代入演算子 を参照下さい。

$a = "Hello ";
$b = $a . "World!"; // $b は、"Hello World!" となります。

$a = "Hello ";
$a .= "World!"; // $a は、"Hello World!" となります。

7 制御構造

7.1 if

 if ($a > $b)
     print "a は b より大きい";

7.2 for

for (式1; 式2; 式3) {
  文1;
  文2;
}

for ($i = 1; $i <= 10; $i++) {
  print $i;
}

7.3 while

while (式) {
  文1;
  文2;
}

8 関数

8.1 ユーザ定義関数

関数は次のような構文で定義されます。

function foo ($arg_1, $arg_2, ..., $arg_n) {
    echo "関数の例\n";
    return $retval;
}

次のページ 前のページ 目次へ