高大連携情報誌 調べもの新聞『大学受験ニュース』(ブログ版)
【検索の達人 ■■■■】 ■■■■に文字を入力!
【PHP: Hypertext Preprocessor】
PHP5
-
パラダイム 命令型, オブジェクト指向
開発者 The PHP Group
最新リリース 5.2.6 / 2008年5月1日
型付け 弱い動的型付け
影響を受けた言語 Perl, C
プラットフォーム cross-platform
ライセンス PHP License[1]
ウェブサイト http://www.php.net/
表・話・編・歴
PHP4
-
パラダイム 命令型, オブジェクト指向
開発者 The PHP Group
最新リリース 4.4.8 / 2008年1月3日
型付け 弱い動的型付け
影響を受けた言語 Perl, C
プラットフォーム cross-platform
ライセンス PHP License[2]
ウェブサイト http://www.php.net/
表・話・編・歴
プログラミング言語
>>他のプログラミング言語
■カテゴリ / ■テンプレート
PHP: Hypertext Preprocessor(ピー・エイチ・ピー ハイパーテキスト プリプロセッサー)とは、動的にHTMLデータを生成することによって、動的なウェブページを実現することを主な目的としたプログラミング言語、およびその言語処理系である。
PHPは、HTML埋め込み型のサーバサイド・スクリプト言語として分類される。この言語処理系自体は、C言語で記述されている。
ウェブサーバ上で動作し、ウェブサーバ上の文書が要求されるたびに、この文書に記述されたPHPのプログラムを実行し、その結果をウェブブラウザに対して送信する。
ウェブブラウザに送信されるデータは通常のHTMLであり、PHPのプログラムを含まない。この点でHTML埋め込み型のクライアントサイド・スクリプト言語(JavaScriptなど)と本質的に異なっている。
平易な文法のため初心者でも習得しやすく、また大規模な開発にも多く用いられている。多くのフレームワークやライブラリが存在し、開発の手助けとなっている。
数多くのオープンソースウェブアプリケーションに利用されている一方、しばしば脆弱性の報告がなされ、過去に深刻なセキュリティホールが何度か報告されている。
目次 [非表示]
1 名称
2 仕様
3 構文
3.1 基本と制御構造
3.1.1 データ型
3.1.2 配列
3.1.3 グローバル変数
3.2 クラスとオブジェクト
3.2.1 アクセス権
3.2.2 インターフェース(定義部)と抽象化(abstract)
3.2.2.1 インタフェースの実装
3.2.2.2 抽象クラスの定義
3.3 PDO
3.4 その他
4 PHPによる有名なソフト
5 対応する主要DBMS
6 フレームワーク
7 歴史
7.1 PHP 1.0
7.2 PHP Version 2 (PHP/FI)
7.3 PHP 3.0
7.4 PHP 4.0.0
7.5 PHP 4.1.0
7.6 PHP 4.2.0
7.7 PHP 4.3.0
7.8 PHP 4.4.0
7.9 PHP 5.0.0
7.10 PHP 5.1.0
7.11 PHP 5.2.0
8 脚注
9 関連項目
10 外部リンク
[編集] 名称
正式名称は「PHP: Hypertext Preprocessor」であるが、一般的には「PHP」と省略して用いられる。このPHPとは、Personal Home Page Toolsの頭文字に由来する[1]。
[編集] 仕様
PHPはCommon Gateway Interface (CGI) をサポートしており、CGIをサポートするWebサーバ上でPHPスクリプトを実行することができる。この他にもFastCGIを通じてWebサーバから起動したり、利用するWebサーバがモジュール機構を提供していれば、モジュールとしてWebサーバに組み込んだ状態で動作させることが可能である。その為、phpモジュールに脆弱性があった場合、簡単にWebサーバの権限を奪取され、サーバを破壊されることもある。
PHPは、PHP4以降Zend Engineをスクリプト言語を処理するエンジンとして利用している。Zend Engineは、PHP3の開発者によって設立されたZend Technologies Ltd.により開発されたソースコードが公開されているスクリプティングエンジンで、PHP5ではZend Engine 2.0になった。Zend Engineは基本的に1つのプロセスがインタプリタのコンテキストを1つだけ持つものとして設計されている。したがってマルチスレッドを用いたスクリプティングはサポートしていない。
Zend Engineを除くPHP本体は、PHP組み込み関数の実装を含むほか、Webサーバやコマンドラインインターフェイスとスクリプティングエンジンの間を仲介するSAPI (Server API)レイヤ、マルチスレッドで動くWebサーバのモジュールとして利用される場合にグローバル変数のセマンティクスを提供するTSRM (Thread Safe Resource Manager)、さまざまなプラットフォームの入出力機構やAPIの差異を吸収するためのStreamsレイヤから成る。
開発者はSAPIの提供するSPIを実装することで、さまざまなWebサーバのモジュールとしてPHPを動作させることができる。標準では以下のWebサーバ用のSAPIが提供されている。
CGI
AOLserver
Apache HTTP Server (バージョン 1.x 用 / 2.x 用)
Sun Java System Web Server
Roxen WebServer
Tux
ISAPI (Microsoft Internet Information Services等)
Caudium
Continuity
Pi3Web
thttpd
PHPを動作させる方法には、実行ファイル形式(CGI / FastCGI)、モジュール形式(mod_php / ISAPI)がある。どの形式を使用するかはWebサーバにより異なる。一例を挙げるならば、Apacheで動作させる場合はmod_phpを使用し、IISで動作させる場合はISAPIを使用し、lighttpdで動作させる場合はFastCGIを使用し、AN HTTPDで動作させる場合はCGIを使用する(いずれも代表例であり、他の形式でも動作させることは可能だが、実例は少ない)。
PHPにおいては一般的に実行ファイル形式よりもモジュール形式の方が高速に動作するとされる。そのためApacheとmod_phpの組み合わせがよく用いられている。ただし実行ファイル形式でもFastCGIを使用することによりモジュール形式と並ぶパフォーマンスを出すことも可能である(例えばlighttpdとFastCGIの組み合わせ)。
PHPにはWindows、UNIXなどのオペレーティングシステムに対応した処理系が存在する。一部の組み込み関数はプラットフォームごとに挙動が違うため、スクリプトによっては移植作業が必要になる場合がある。
また、多くのDBMSへのインターフェイスを標準で備えており、DBMSとの連携にも高い力を発揮する。
HTML埋め込み型の処理系としては他にASP、JSPなどがある。
PHPには様々な付加機能がPEARというオンラインライブラリ集でモジュールとして提供されており、同名のツールを使って導入/管理が出来る。Perlで言うCPANと同じ役割を持っている。
[編集] 構文
多くの構文をC言語、Java、Perlなどのプログラミング言語から転用しており、動的に生成させるウェブ・ページを速やかに作成できるのが特徴である。ウィキ構築に用いられるソフトの一つであるMediaWikiは、PHPによって書かれている。
幾つかのサンプルコードとその実行結果を交え、PHPの文書構造を解説する。
[編集] 基本と制御構造
PHPは""で囲まれた内部をPHPコードと認識し実行する。それ以外の部分は全てHTMLコードとしてそのまま出力される。
if($a){?>
HTMLコード
}
else{?>
echo "aは偽";?>
}
?>
で囲まれていない部分を除外した際に、構文通りの構造に文書がなっていればPHPはこれを正しく実行する。出力は以下のようになる。(便宜上2通り記す)
// $aが真の時の出力
HTMLコード
// $aが偽の時の出力
aは偽
if、else(elseif)は条件評価の制御構造としてよく知られた構文であり、他にもPHPではfor、while(do)、foreach、switch文などの制御構造がサポートされる。break、continue等の制御構造文もあるが、ループ式を命名するlabel文構造はない。
記号$は変数であることを示し、続く文字はその名前である。PHPは比較的変数に寛容であり、変数が確保されていない場合は、これをエラーとせずにヌルとして処理する。
$a = x;
$$a = y;
echo $x; // yを出力
?>
[編集] データ型
PHPは以下の型をサポートする
スカラー型
文字列型 (String)
整数型 (Integer) - 整数型で扱える範囲はPHPスクリプトを実行するCPUに依存する。
浮動小数点数型 (Float)
論理型 (Boolean)
複合型
オブジェクト型(Object)
配列型 (Array)
特殊型
リソース型 (Resource)
ヌル型 (Null)
[編集] 配列
配列の使用法は以下のようになる。
// array関数での生成
$a = array("wikipedia","mediawiki",3 => "commons");
echo $a[0]; # wikipedia
echo $a[3]; # commons
// 明示的な代入
$b[0] = "wikipedia";
$b[] = "mediawiki";
$b[] = "commons";
echo $b[2]; // #commons
[編集] グローバル変数
PHPで定義されているスーパーグローバル変数を幾つか挙げる。
$GLOBALS
全てのグローバル変数を連想配列とする。
括弧とは同義だが、過去のバージョンは括弧内のみでしか参照できない。
$_SERVER($HTTP_SERVER_VARS)
実行環境情報情報
$_ENV($HTTP_ENV_VARS)
環境変数
$_POST($HTTP_POST_VARS)
POSTメソッド変数
$_GET($HTTP_GET_VARS)
GETメソッド変数
$_COOKIE($HTTP_COOKIE_VARS)
COOKIE変数
以下はPHP4.1以降で提供される。
$_REQUEST
$_GET、$_POST、$_COOKIE、$_FILES、更にURIクエリー(ロケーション)を連想配列として格納する。
$_FILES
ファイルアップロード処理変数
$_SESSION
セッション
全容把握には、print_r関数等で参照するとよい。
print_r($_SERVER);
?>
[編集] クラスとオブジェクト
オブジェクト指向のPHPはクラスとオブジェクトをサポートしている。以下にクラス等オブジェクトの例をあげる。
class abc{
var $a = null;
function b(){
echo "abcクラスbメソッドn";
return "戻値:abc->b";
}
function abc(){
echo "abc:コンストラクタ生成n";
}
}
class def extends abc{
function def(){
echo "def:コンストラクタ生成 > ";
echo "def再定義メソッド(継承):" . parent::b() . "n";
}
function b(){
echo "オーバーライドされたbメソッドn";
}
}
$c = new abc();
abc::b();
$f = new def();
$f->b();
?>
PHPに於けるコンストラクタ生成の演算子はnewである。extendsでクラスの継承が可能であるが多重継承はサポートされていない。varはおなじみだが、メンバ変数を宣言し定義する。echoは続くオブジェクトを出力するPHPの文書構造である。そのほかにもlist(配列)、final(メソッド)、private・public・protected(アクセス権)などの文書構造がある
parentは継承されたメソッドが、インスタンスされオーバーライドされた結果、継承されなかったメソッドを参照出来る。ここでdefクラスに継承されたメソッドはabc->bメソッドであり、def->bメソッドにより上書きされている。出力結果は以下の様になる。
abc:コンストラクタ生成
abcクラスbメソッド
def:コンストラクタ生成 > abcクラスbメソッド
def再定義メソッド(継承):戻値:abc->b
オーバーライドされたbメソッド
[編集] アクセス権
アクセス権やfinalはPHP 5で導入された概念である(一部除く)。finalはメソッドを子クラスで上書きすることを禁止する構造である。
上記コードのインスタンス化されていないabc::b();でスコープ解決されたメンバ部分は、PHP5ではアクセス権の問題でアクセス出来ない。この場合、インスタンス化せずに呼び出したいので、
// static:
class abc{
var $a = null;
static function b(){
---------------------
とstatic宣言をせねばならない。宣言がない場合、全てpublic(どこからでも参照可)で処理される。
なおvarは互換性のため残されており、publicと等価であるが、PHP5.1.3以前のPHP5はエラーとなる。protectedは親クラス・派生クラス・ないしそれを実装するクラス自身からのアクセスのみを許可し、privateは定義クラス内部のみ参照が可能である。
[編集] インターフェース(定義部)と抽象化(abstract)
抽象化はPHP 5より導入された概念であり、インタフェースはJavaのそれやObjective-Cので実装されているものである。 Objective-Cと違い、インタフェースはいまのところこれはコードから定義部と実装部を完全に切り離すものではなく、定義の必要性は無い。
やっていることは抽象クラス(抽象メソッド)とインターフェースは実質変わらないが、その概念は異なる。
インターフェースはその処理内容を定義せずに定義されるが、抽象クラス(抽象メソッド)は実装部の具体的な処理のコードと共に定義されている。
[編集] インタフェースの実装
まず最初に具体的なソースコードを示す。
interface classTemplates
{
public function methodAlpha($arg1, $arg2);
public function methodBeta($arg1);
}
class appTemplate implements classTemplates
{
public function methodAlpha($arg1, $arg2)
{
}
public function methodBeta($arg1)
{
}
}
?>
interface接頭辞をつけテンプレートを定義し、implementsをつけクラスに適用し実装する。テンプレートはextends で継承可能である。 テンプレートは定義されていても必ず適用されるクラスが必要なわけではない。ただし、適用する前に定義されている必要がある。
いまのところ、定義できるのメンバはpublic(公開可視性)のあるメソッドだけである。
適用されたクラスに定義されたメソッドの「アクセス権・引数」が異なればエラーを引き起こし、またクラスの名前と同じinterfaceは定義できない。
インタフェースの継承
interface classTemplatesModel
{
public function methodAlpha($arg1, $arg2);
public function methodBeta($arg1);
}
interface classTemplates extends classTemplatesModel
{
public function methodGamma();
}
?>
interfaceの多重継承について
今のところ、多重継承は出来ない。よって以下のコードは無効である
interface classTemplatesModel
{
public function methodAlpha($arg1, $arg2);
public function methodBeta($arg1);
}
interface classTemplates extends classTemplatesModel
{
public function methodGamma();
}
// このようなimplementsの実装は無効。
class appTemplate implements classTemplates, classTemplatesModel
{
public function methodAlpha($arg1, $arg2)
{
}
public function methodBeta($arg1)
{
}
public function methodGamma()
{
}
}
?>
[編集] 関連項目
XAMPP
Standard PHP Library
[編集] 外部リンク
PHP: Hypertext Preprocessor(公式ページ)
PHPマニュアル翻訳プロジェクト
日本PHPユーザー会
eAccelerator(中間コードキャッシュ)
"http://ja.wikipedia.org/wiki/PHP:_Hypertext_Preprocessor" より作成
カテゴリ: プログラミング言語 | スクリプト言語 | オープンソース | Webサーバ | PHP
最終更新 2008年9月4日 (木) 20:27。
Wikipedia®
【高大連携情報誌「大学受験ニュース」(ブログ版)発信中!
ポータルサイト 検索(情報)の達人 IT事典(書物・人物・他:文学作品)
高大連携情報誌「大学受験ニュース」
236-0038 横浜市金沢区六浦南2-27-18-201 調べもの新聞編集室
nakamurayoshio@gmail.com TEL&FAX 045-701-6113
オープンキャンパス(大学・高校・中学)の取材にお伺いします。(無料)
当日のイベント情報を
高大連携(こうだい・れんけい)情報誌「大学受験ニュース(ブログ版)」にて
全国に発信します!!!
紙媒体の高大連携情報誌「大学受験ニュース」もおつくりします。
(全国のオープンキャンパスにて、受験生に配布します。)
見本誌(紙媒体)をお送りします。(無料)
nakamurayoshio@gmail.com TEL&FAX 045-701-6113
(A4の2つ折:A5の4P)共通記事(1~3P)と▲▲▲大学記事(4P)で構成。
調べもの文庫 大学受験の基礎知識 ▲学部(▲学部を持つ日本の大学)
調べもの文庫 大学受験の基礎知識 ▲▲県(▲▲県の大学一覧)
調べもの文庫 大学受験の基礎知識 ▲▲▲大学のオープンキャンパス
調べもの文庫 大学受験の基礎知識 取得資格の一覧(▲▲▲大学・▲学部)
調べもの文庫 大学受験の基礎知識 名作文庫(▲▲県)▲▲▲大学
調べもの文庫 大学受験の基礎知識 ▲▲▲大学への道 (入試日程・資料請求)
【高大連携情報誌「大学受験ニュース」(ブログ版)発信中!
【正会員募集!】
調べもの新聞編集室では、
隔月刊「大学受験ニュース」(紙媒体)の発行と
ブログ版高大連携情報誌(「大学受験ニュース」毎日更新)の全国発信をしております。
正会員(大学院・大学・高校・中学:教育関係出版社) 年会費(18000円)