PHP: Hypertext Preprocessor(ピー・エイチ・ピー ハイパーテキスト プリプロセッサー)とは、動的にHTMLデータを生成することによって、動的なウェブページを実現することを主な目的としたプログラミング言語、およびその言語処理系である。一般的には PHP と省略して用いられており、これは「個人的なホームページ」を意味する英語の " に由来する。PHPはサーバーサイド・スクリプト言語として利用されており、Webサーバ上で動作し、Webサーバ上でPHPスクリプトの文書が要求されるたびに、そのPHPスクリプトが実行され、結果をウェブブラウザに対して送信する。平易な文法のため初心者でも習得しやすく、また大規模な開発にも多く用いられている。多くのフレームワークやライブラリが存在し、開発の手助けとなっている。数多くのオープンソースウェブアプリケーションに利用されている一方、しばしば脆弱性の報告がなされ、過去に深刻なセキュリティホールが何度か報告されている。PHPのマスコットアニマルとしては象が多用される。PHPには以下の特徴を持ち合わせている。PHP4以降、Zend Engineをスクリプト言語を処理するエンジンとして利用している。Zend Engineは、PHP3の開発者によって設立されたZend Technologies Ltd.により開発されたオープンソースのスクリプト言語エンジンである。Zend Engineは1つのプロセスが1つのインタプリタのコンテキストを持つように設計されていて、単独ではマルチスレッドを用いた処理をサポートしていない。スクリプト実行環境としてのPHPは、Zend Engineに加え、PHPの組み込み関数の実装、Webサーバや標準入出力とスクリプティングエンジンの間を仲介するSAPI (Server API) レイヤ、マルチスレッドで動くWebサーバのモジュールとして利用される場合にグローバル変数のセマンティクスを提供するTSRM (Thread Safe Resource Manager)、プラットフォーム間での入出力機構やAPIの差異を吸収するStreamsレイヤからできている。しかし、一部の組み込み関数はプラットフォームごとに挙動が違うため、スクリプトによっては移植作業が必要になる場合がある。また、.NET Framework上のPhalanger、JITコンパイルを行うHHVMなど、公式のZend Engine以外にもPHPの実装が存在する。PHPをWebサーバで動作させる方法には、実行ファイル形式 (CGI / FastCGI)、モジュール形式(mod_php / ISAPI など)がある。どの方法を利用するか(利用できるか)はWebサーバにより異なる。実行ファイル形式によるCGIはほぼ全てのWebサーバに対応しているが、Apacheで動作させる場合はmod_phpとFastCGI、IISで動作させる場合はFastCGIとISAPI、lighttpdやNginxで動作させる場合はFastCGIが使用できる。このほかにも、PHPに標準で実装されているWebサーバ用APIは多い。以下に一覧を挙げる。とくに、HTTPリクエストの度にプロセスを起動させないインタフェース(Apacheとmod_phpの組み合わせ、またはlighttpdなどのFastCGIに対応したWebサーバ)での動作が高速である。多くの構文をC言語、Java、Perlなどのプログラミング言語から借用しており、動的に生成させるウェブ・ページを速やかに作成できるのが特徴である。幾つかのサンプルコードとその実行結果を交え、PHPの文書構造を解説する。PHPは""で囲まれた内部をPHPコードと認識し実行する。それ以外の部分は全てHTMLコードとしてそのまま出力される。で囲まれていない部分を除外した際に、構文通りの構造に文書がなっていればPHPはこれを正しく実行する。出力は以下のようになる(便宜上2通り記す)。if、else (elseif) は条件評価の制御構造としてよく知られた構文であり、他にもPHPではfor、while (do)、foreach、switch文などの制御構造がサポートされる。break、continue等の制御構造文もあるが、ループ式を命名するlabel文構造はない。記号$は変数であることを示し、続く文字はその名前である。PHPは比較的変数に寛容であり、変数が確保されていない場合は、これをエラーとせずにnullとして処理する。PHPは以下の型をサポートする配列の使用法は以下のようになる。PHPで定義されているスーパーグローバル変数を幾つか挙げる。括弧とは同義である。過去のバージョンは括弧内のみでしか参照できないが、現在のバージョンでは利用は非推奨となっている。以下はPHP4.1以降で提供される。全容把握には、var_dump 関数等で参照するとよい。オブジェクト指向のPHPはクラスとオブジェクトをサポートしている。以下にクラスとオブジェクトの例をあげる。PHPに於けるコンストラクタ生成の演算子はnewである。extendsでクラスの継承が可能であるが多重継承はサポートされていない。メンバ変数を宣言し定義する際にはprivate・public・protected(アクセス権)を用いる(過去のバージョンでは var が使われていた)。echoは続くオブジェクトを文字列として出力するPHPの文書構造である。parentは継承されたメソッドが、インスタンスされオーバーライドされた結果、継承されなかったメソッドを参照出来る。ここでdefクラスに継承されたメソッドはabc->bメソッドであり、def->bメソッドにより上書きされている。出力結果は以下の様になる。アクセス権やfinalはPHP 5で導入された概念である(一部除く)。finalはメソッドを子クラスでオーバーライドすることを禁止する構造である。インスタンス化されていないabcクラスのbメソッドを静的に呼び出したい場合、とstatic宣言をせねばならない。宣言がない場合、全てpublic(どこからでも参照可)で処理される。なおvarは互換性のため残されており、publicと等価であるが、PHP5.1.3以前のPHP5はエラーとなる。protectedは親クラス・派生クラス・ないしそれを実装するクラス自身からのアクセスのみを許可し、privateは定義クラス内部のみ参照が可能である。抽象化はPHP 5より導入された概念であり、インタフェースはJavaのそれやObjective-Cので実装されているものである。Objective-Cと違い、インタフェースはいまのところこれはコードから定義部と実装部を完全に切り離すものではなく、定義の必要性は無い。やっていることは抽象クラス(抽象メソッド)とインタフェースは実質変わらないが、その概念は異なる。インターフェースはその処理内容を定義せずに定義されるが、抽象クラス(抽象メソッド)は実装部の具体的な処理のコードと共に定義されている。まず最初に具体的なソースコードを示す。interface接頭辞をつけテンプレートを定義し、implementsをつけクラスに適用し実装する。テンプレートはextends で継承可能である。テンプレートは定義されていても必ず適用されるクラスが必要なわけではない。ただし、適用する前に定義されている必要がある。いまのところ、定義できるのメンバはpublic(公開可視性)のあるメソッドだけである。適用されたクラスに定義されたメソッドの「アクセス権・引数」が異なればエラーを引き起こし、またクラスの名前と同じinterfaceは定義できない。interfaceは多重継承が可能である。複数のinterfaceを実装するにはimplementsにコンマ区切りでinterface名を書く。クラス名にfinalと同じ様に接頭辞としてabstractをつければ、それは抽象クラスとなる。メソッドにつければ、それは必ず継承したクラスで実装されねばならない(引数は同じである必要がある)。具体的なソースを示す。__construct() は PHP 5からインスタンス生成の時に自動的に呼び出されるコンストラクタ(__destruct()、デストラクタも実装された)。protected(保護可視性)は、継承されたクラス・または内部($this、parentなど)でないと、使えないようにする宣言である。抽象化されたクラスはインスタンスを生成出来ない。よって new Alpha(); とすることは出来ない。また、抽象化されたメソッドは継承しないと使用することは出来ない。MySQLやPostgreSQLなど主要なRDBMSへの接続については、それぞれ専用の関数ライブラリが用意されている。phpinfo()を表示させれば、そのPHPバージョンにおけるインプリメント状況を確認できる。関数の仕様については微妙な差があり、異なるRDBMSへの移行には支障となる。そのリスクを軽減するのがPDO (PHP Data Object) と呼ばれる、共通する機能はなるべく同じインタフェースで実現しようというアイデアによる、抽象化ライブラリである。ただし文字列処理関数などSQLごとに存在している差異までカバーしているわけではなく、移行に際してはそれなりの注意が必要である。いくらか楽になるという程度の認識で、過信は禁物といえよう。RDBMSごとに、pdo_から始まる名称のドライバモジュールが提供されているが、最近のPHP5.2.5などドライバモジュールが見当たらなくても、標準で組み込まれているケースがある。include、require等の演算子で外部ファイルに記述されたPHPコードを追加ないし、参照、実行が可能である。returnは戻り値を返す文書構造である。return()とすることで戻り値を評価することも可能である。Unixコマンドを実行可能であるが、CGIより実行権限は低くなっている。また一部関数はこのUnixコマンドを参照するため、Windows系OSでは使用できない関数がある。コマンドを参照する関数を使用する際は、サーバの設定でパスが通っている必要がある。幾つもの拡張により扱える関数は環境に依りまちまちである。詳しくは外部リンクのリファレンスを参照されたい。複数のPHPプロジェクト参加者からなる団体のPHP-FIGにより、PSRと呼ばれる相互運用性を高める規約が制定されている。ファイル名や一般的なコーディング規約だけでなく、クラスのオートロード方法等の実装部分にまで及んでおり、PSR-1、PSR-2等と複数の分野に分かれて制定されている。1995年6月8日にリリース。ラスマス・ラードフが開発。C言語で書かれた CGI 用のツール集だった。ラスマスはそれらのツール群を PHP (Personal Home Page Tools) と名づけた。初期は Perl で書かれていたという言説を見かけるが、それは誤り。1996年4月16日にリリース。 FI(Form Interpreter、SQLによるDBMSツール)が統合され、1997年に PHP/FI2.0 となる。フルスペルは「Personal Home Page Construction Kit/Form Interpreter」。1998年6月6日にリリース。 PHP/FI を元に、アンディ・ガトマンズとゼーブ・スラスキーによって PHP3 (PHP: Hypertext Preprocessor) が再度書き直された。2000年5月22日にリリース。PHP3 を大幅に機能拡張。Zend Engine 導入。2001年12月10日にリリース。スーパーグローバルが追加される。2002年4月22日にリリース。register_globals の初期値が Off に変更される。2002年12月27日にリリース。コマンドラインインタフェースの実装。2005年7月11日にリリース。2007年7月11日、PHP4のサポートを2007年12月31日をもって終了するという告知がなされた。重大なセキュリティに関する修正のみ、2008年8月8日まで継続され、その後すべてのサポートは終了した。2004年7月13日にリリース。擬似的なオブジェクト指向がより一層強化されると共に、クラスライブラリとして SPL がサポートされた。また、SQLite が標準装備されるようになった。Zend Engine 2.0 導入。2005年11月24日にリリース。実行速度の改善、PDO エクステンションが追加される。2006年11月2日にリリース。拡張モジュールに Filter(フィルタ)がデフォルトで追加される。2009年6月30日にリリース。以下の機能が追加になった。2012年3月1日にリリース。以下の機能が追加になった。2013年6月20日にリリース。以下の機能が追加になった。2014年8月28日にリリース。主な新機能は以下の通り。PHP 5.3の次のリリースとなるべく開発されていたバージョン。エンジンの内部処理がUTF-16に置き換えられる計画であったが、多くの問題に見舞われたことから2010年に開発を断念。5.4へと置き換えられた。また5.6の次のバージョンが7とされたことから、欠番となった。2015年12月3日にリリースされた。Zend Engineの改善を行うPHPNG (PHP Next-Gen) プロジェクトの成果を取り入れており、データ構造の改善などにより、前バージョンのPHP 5.6と比べて25%から70%の性能改善が図られている。また言語仕様も大きく拡張されており、引数のタイプヒンティングにスカラー型が指定できるようになる(タイプヒンティングは5.1で導入されたが、クラスや配列など一部の型に限られていた)他、戻り値へのタイプヒンティングも導入されており、前年に発表されたHHVM用プログラミング言語Hackの影響が見受けられるものになっている。Windows環境でApacheと組み合わせる場合、Windows版PHPやApacheの開発環境であるMicrosoft Visual C++のバージョンの関係から、ApacheのモジュールはApache公式サイトではなく、「Apache Lounge」なるサイトにあるものを使うように、PHPの公式サイトに記載されている。
出典:wikipedia
LINEスタンプ制作に興味がある場合は、
下記よりスタンプファクトリーのホームページをご覧ください。