PHP

ウィキペディアから、無料の百科事典
ナビゲーションにジャンプ 検索にジャンプ

PHP
PHP-logo.svg
パラダイムマルチパラダイム命令型機能型、オブジェクト指向手続き型リフレクション
によって設計されたラスマス・ラードルフ
デベロッパーPHP開発チーム、Zend Technologies
初登場1995年6月8日; 26年前[1] [2] (1995-06-08)
安定リリース
8.1.2 [3] Edit this on Wikidata / 2022年1月20日; 23日前 (20 January 2022)
プレビューリリース
8.1.0ベータ1 [4] Edit this on Wikidata / 2021年7月22日; 6ヶ月前 (22 July 2021)
規律の入力ダイナミック弱い

バージョン7.0以降:

段階的[5]
実装言語C(主に;一部のコンポーネントC ++
OSUnixライクWindowsmacOSIBM iOpenVMS
ライセンスPHPライセンス( Zend Engineライセンスに基づくZendエンジンのほとんど
ファイル名拡張子.php、、、、、.phar_ .phtml_ .pht_.phps
Webサイトwww .php .net Edit this at Wikidata
主な実装
Zend EngineHHVMPeachPieQuercusParrot
に影響を受けた
PerlHTMLCC ++Java [要出典]Tcl[2] JavaScriptハック[6]
影響を受け
ハックJSPASP

PHPは、Web開発を対象とした汎用 スクリプト言語です。[7]もともとは、デンマークとカナダのプログラマーであるRasmus Lerdorfによって1994年に作成されました。 [8] PHPリファレンス実装は、現在PHPGroupによって作成されています。[9] PHPは元々PersonalHome Pageの略でしたが[8]、現在は再帰的頭字語PHP:HypertextPreprocessorの略です。[10]

PHPコードは通常、モジュールデーモン、またはCommon Gateway Interface(CGI)実行可能ファイルとして実装されたPHPインタープリターによってWebサーバー上で処理されます。Webサーバーでは、解釈および実行されたPHPコードの結果(生成されたHTMLバイナリイメージデータなど、任意のタイプのデータ)がHTTP応答の全体または一部を形成します。さまざまなWebテンプレートシステム、Webコンテンツ管理システム、およびWebフレームワークその応答の生成を調整または促進するために使用できるものが存在します。さらに、PHPは、スタンドアロンのグラフィカルアプリケーション[11]ロボット ドローン制御など、Webコンテキスト外の多くのプログラミングタスクに使用できます。[12] PHPコードはコマンドラインから直接実行することもできます

Zend Engine搭載した標準のPHPインタープリターは、 PHPライセンスの下でリリースされた無料のソフトウェアです。PHPは広く移植されており、さまざまなオペレーティングシステムプラットフォーム上のほとんどのWebサーバーにデプロイできます。[13]

PHP言語は、2014年まで、書面による正式な仕様や標準なしで進化し、元の実装は、他の実装が従うことを目的とした事実上の標準として機能していました。2014年以降、正式なPHP仕様を作成する作業が続けられています。[14]

W3Techsは、2022年1月の時点で、「PHPは、サーバー側のプログラミング言語を知っているすべてのWebサイトの78.1%で使用されている」と報告しています。[15] PHPバージョン7.4が最も使用されているバージョンです。バージョン7.3のサポートは、2021年12月6日に削除されました。

歴史

初期の歴史

PHPの開発は、 RasmusLerdorfがCいくつかのCommonGateway Interface(CGI)プログラムを作成した1994年に始まりました[16] [17]。これは、彼が個人のホームページを維持するために使用していました。彼はそれらを拡張してWebフォームを操作し、データベースと通信し、この実装を「パーソナルホームページ/フォームインタープリター」またはPHP / FIと呼びました。

PHP / FIを使用して、シンプルで動的なWebアプリケーションを構築できますバグ報告を加速し、コードを改善するために、Lerdorfは当初、1995年6月8日にUsenetディスカッショングループcomp.infosystems.www.authoring.cgiで「パーソナルホームページツール(PHPツール)バージョン1.0」としてPHP / FIのリリースを発表しました。[1] [18]このリリースには、PHPが現在持っている基本的な機能がすでに含まれています。これには、Perlのような変数、フォーム処理、およびHTMLを埋め込む機能が含まれていました。構文はPerlの構文に似ていましたが、より単純で、制限があり、一貫性がありませんでした。[9]

初期のPHP構文の例:[19]

<!- include  / text / header html- >

<!- getenv  HTTP_USER_AGENT- > 
<!- if  substr  $ exec_result Mozilla-  >ねえ
  あなた  Netscape 使用しています !< p > <!- endif- >


<!- sql  database  select  *  from  table  where  user = '$ username' -> 
<!- ifless  $ Numentries  1- >
  申し訳ありませんが、 その レコードは 存在しませ  < p > <!- endif exit- >ようこそ<!- $ user ->!< p >アカウント<!- $ index 0- >クレジットが残っています<
 
   
         p >

<!- include  / text / footer html- >

初期のPHPは新しいプログラミング言語を意図したものではなく、有機的に成長し、ラードルフは振り返って次のように述べています。プログラミング言語の書き方がまったくわからないので、途中で次の論理的なステップを追加し続けました。」[20]開発チームが結成され始め、数か月の作業とベータテストの後、1997年11月にPHP / FI2が正式にリリースされました。

PHPは元々設計されていなかったが、代わりに有機的に開発されたという事実により、関数の命名とパラメーターの順序に一貫性がなくなりました。[21]場合によっては、関数名はPHPが「ラップ」していた下位レベルのライブラリに一致するように選択されましたが[22]、PHPの非常に初期のバージョンでは、関数名の長さがハッシュ関数として内部的に使用されていました。 、そのため、ハッシュ値の分散を改善するために名前が選択されました[23]

PHP3および4

ZeevSuraskiAndiGutmansは、1997年にパーサーを書き直し、PHP 3のベースを形成し、言語の名前を再帰的頭字語 PHP:HypertextPreprocessorに変更しました。[9] [24]その後、PHP 3の公開テストが開始され、1998年6月に正式にリリースされました。SuraskiとGutmansは、PHPのコアの新しい書き直しを開始し、 1999年にZendEngineを作成しました。 [25] Zendも設立しました。 Ramat Ganイスラエルテクノロジー[9]

2000年5月22日、Zend Engine1.0を搭載したPHP4がリリースされました。[9] 2008年8月までに、このブランチはバージョン4.4.9に到達しました。PHP 4は現在開発中ではなく、セキュリティアップデートもリリースされる予定はありません。[26] [27]

PHP 5

2004年7月1日、新しいZend EngineIIを搭載したPHP5がリリースされました。[9] PHP 5には、オブジェクト指向プログラミングのサポートの改善、PHPデータオブジェクト(PDO)拡張機能(データベースにアクセスするための軽量で一貫性のあるインターフェイスを定義する)、多数のパフォーマンス強化などの新機能が含まれていました。[28] 2008年、PHP5は開発中の唯一の安定バージョンになりました。後期静的バインディングは以前のバージョンのPHPから欠落しており、バージョン5.3で追加されました。[29] [30]

多くの有名なオープンソースプロジェクトは、PHP4からPHP5への移行を促進するPHP開発者のコ​​ンソーシアムによって提供されたGoPHP5イニシアチブ[ 31]のため、2008年2月5日から新しいコードでPHP4をサポートしなくなりました。 ] [33]

時間の経過とともに、PHPインタープリターは、PHPソースコードからビルドするか、ビルド済みのバイナリを使用することにより、ほとんどの既存の32ビットおよび64ビットオペレーティングシステムで使用できるようになりました。[34] PHPバージョン5.3および5.4の場合、利用可能なMicrosoft Windowsバイナリディストリビューションは32ビットIA-32ビルドのみでした。 [35] [36] 64でインターネット情報サービス(IIS)を使用する場合はWindows32ビット互換モードが必要です。 -ビットWindowsプラットフォーム。PHPバージョン5.5により、64ビットのx86-64ビルドがMicrosoftWindowsで利用できるようになりました。[37]

PHP5.6の公式セキュリティサポートは2018年12月31日に終了しました。[38]

PHP6とUnicode

PHPは、コア言語レベルでのネイティブUnicodeサポートが不足しているため、さまざまなレビューを受けました。[39] [40] 2005年、Andrei Zmievskiが率いるプロジェクトは、 International Components for Unicode(ICU)ライブラリを組み込み、テキスト文字列をUTF-16として内部的に表現することにより、PHP全体でネイティブUnicodeサポートを提供するために開始されました。[41]これにより、言語の内部とユーザーコードの両方に大きな変更が生じるため、開発中の他の主要な機能とともに、これを言語のバージョン6.0としてリリースすることが計画されていました。[42]

ただし、必要な変更を理解している開発者の不足、およびWebコンテキストではめったに使用されないUTF-16との間の変換に起因するパフォーマンスの問題により、プロジェクトが遅延しました。[43]その結果、2009年にPHP 5.3リリースが作成され、多くの非Unicode機能がPHP 6からバックポートされ、特に名前空間が使用されました。2010年3月、現在の形式のプロジェクトは正式に中止され、特性やクロージャの再バインドなど、PHP6の残りのほとんどの非Unicode機能を含むPHP5.4リリースが準備されました。[44]当初の希望は、Unicode統合のための新しい計画が形成されることでしたが、2014年までに採用されたものはありませんでした。


PHP 7

2014年と2015年の間に、新しいメジャーPHPバージョンであるPHP 7が開発されました。このバージョンの番号付けには、内部開発者の間でいくつかの議論がありました。[45] PHP 6 Unicodeの実験はリリースされていませんでしたが、いくつかの記事や本のタイトルでPHP 6の名前が参照されていたため、新しいリリースで名前を再利用すると混乱が生じる可能性があります。[46]投票後、PHP7という名前が選ばれました。[47]

PHP 7の基盤は、もともとPHP次世代phpng )と呼ばれていたPHPブランチです。Dmitry Stogov、Xinchen Hui、Nikita Popov [48]によって作成され、ほぼ完全な言語互換性を維持しながらZendEngineをリファクタリングすることでPHPのパフォーマンスを最適化することを目的としています。[49] 2014年7月14日までに、phpngプロジェクトの主要なベンチマークスイートとして機能したWordPressベースのベンチマークは、ほぼ100%のパフォーマンスの向上を示しました。phpngからの変更により、将来のバージョンでのパフォーマンスの向上が容易になります。よりコンパクトなデータ構造やその他の変更が、ジャストインタイム(JIT)コンパイラへの移行を成功させるのに適していると見なされるためです。[50]大幅な変更があったため、再加工されたZendEngineはZendEngine 3と呼ばれ、PHP5で使用されていたZendEngine2の後継となりました。 [51]

phpngの主要な内部変更のため、PHPのリリースプロセスによると、PHP 5のマイナーリリースではなく、PHPの新しいメジャーバージョン番号を受け取る必要があります。[52] PHPのメジャーバージョンは、コードの下位互換性を破ることが許可されているため、PHP 7は、下位互換性の破れを必要とするphpng以外の改善の機会を提供しました。特に、次の変更が含まれていました。

  • 多くの致命的または回復可能なレベルのレガシーPHPエラーメカニズムは、最新のオブジェクト指向の例外に置き換えられました。[53]
  • 変数の間接参照の構文は、内部的に一貫性があり完全になるように作り直され、任意の意味のある左側の式で演算子、、、、、およびを使用できるよう->なりまし[][54](){}::
  • 従来のPHP4スタイルのコンストラクターメソッドのサポートは廃止されました。[55]
  • foreachステートメントの動作は、より予測しやすいように変更されました。[56]
  • 一貫性を保つために、失敗時にnullを返すPHPに組み込まれているいくつかのクラスのコンストラクターが、代わりに例外をスローするように変更されました。[57]
  • いくつかのメンテナンスされていない、または非推奨のサーバーアプリケーションプログラミングインターフェイス(SAPI)と拡張機能が、PHPコアから削除されました。特に、レガシーmysql拡張機能です。[58]
  • list()文字列のサポートを削除するために、演算子の動作が変更されました。[59]
  • 従来のASPスタイルの区切り文字<%%>およびのサポートが削除されました<script language="php"> ... </script>[60]
  • switchステートメントに複数のdefault句を含めることができる見落としが修正されました。[61]
  • 文字列から数値タイプへの暗黙的な変換での16進数のサポートが削除されました。[62]
  • シフト演算子と右シフト演算子は、プラットフォーム間でより一貫して動作するように変更されました。[63]
  • 浮動小数点数と整数の間の変換が変更され(たとえば、無限大が変更されてゼロに変換され)、プラットフォーム間でより一貫して実装されました。[63] [64]

PHP 7には、新しい言語機能も含まれています。最も注目すべきは、既存のパラメーター型宣言を補完する関数[65]の戻り型宣言を導入し、パラメーターおよび戻り型宣言でスカラー型(整数、浮動小数点、文字列、およびブール)をサポートすることです。[66]

PHP 8

PHP 8は2020年11月26日にリリースされました。PHP8はメジャーバージョンであり、以前のバージョンから大幅な変更が加えられています。[67] [68]新機能と注目すべき変更点は次のとおりです。

ジャストインタイムコンパイル

ジャストインタイムコンパイルはPHP8でサポートされています。[69]

PHP 8のJITコンパイラは、一部のユースケースで大幅なパフォーマンスの向上をもたらすことができます[70] [71]が、PHP開発者のNikita Popovは、ほとんどのWebサイトのパフォーマンスの向上はPHP5からPHP7へのアップグレードよりも大幅ではないと述べています。[72]一般的なWeb開発のユースケースよりも、数学タイプの操作の方が大幅な改善が期待されます。[72]さらに、JITコンパイラーは、一部のユースケースのパフォーマンスが向上するため、一部のコードをCからPHPに移動する将来の可能性を提供します。[73]

一致式の追加

PHP8はmatch式を導入しました。[74]一致式は概念的にステートメントに似ておりswitch、一部のユースケースではよりコンパクトです。[75]は式であるためmatch、その結果を変数に取り込むか、関数から返すことができます。[76]

タイプの変更と追加

PHP 8では、共用体型、新しいstatic戻り型、および新しいmixed型が導入されました。[67]

他のプログラミング言語では「注釈」と呼ばれることが多い「属性」がPHP8で追加され、メタデータをクラスに追加できるようになりました。[67]

throwステートメントから式に変更されました。[77]これにより、以前は不可能だった場所に例外をスローすることができます。[67]

構文の変更と追加

PHP 8には、多くのシナリオで代替、より簡潔、またはより一貫性のある構文を可能にする変更が含まれています。たとえば、nullsafe演算子は、null合体演算子 ??に似ていますが、メソッドを呼び出すときに使用されます。[78]getBirthday()次のコードスニペットは、 nullを返し てもエラーをスローしません。

$ human_readable_date  =  $ user- > getBirthday ()?-> diffForHumans ();

コンストラクタープロパティの昇格が「シンタックスシュガー」として追加され、パラメーターがクラスコンストラクターに渡されたときにクラスプロパティを自動的に設定できるようになりました[67]これにより、記述しなければならない 定型コードの量が減ります。

その他の小さな変更には、オブジェクトでの使用のサポートが含まれます。これは、 ;::classの使用の代替として機能します。[67] try-catchブロックでの非キャプチャーキャッチ。不整合を解決するための可変構文の調整。名前付き引数のサポート。パラメータリストでの末尾のコンマのサポート。これにより、配列などの他のコンテキストでの末尾のコンマのサポートとの一貫性が追加されます。 get_class()

標準ライブラリの変更と追加

  • 弱いマップがPHP8で追加されました。AWeakMapはオブジェクトへの参照を保持しますが、これらの参照はそのようなオブジェクトがガベージコレクションされるのを妨げません。[79]これにより、データがキャッシュされているシナリオでパフォーマンスが向上しますこれは、 ORMにとって特に重要です[67]
  • DateTimeインターフェイスからオブジェクトを作成するためのサポートの追加や、Stringable型ヒントに使用できるインターフェイスの追加など、インターフェイスのさまざまな調整。
  • str_contains()、str_starts_with()、str_ends_with()などのさまざまな新しい関数。[80] fdiv(); get_debug_type(); およびget_resource_id()
  • token_get_all()のオブジェクト実装

追加の変更

  • 型注釈もPHPのCソースコード自体に追加され、内部関数とメソッドが「完全な型情報を反映」できるようになりました。[81]
  • プライベートメソッドによる継承
  • 特性改善における抽象的な方法

PHP 8.1

PHP 8.1は2021年11月25日にリリースされました。これには、列挙型(「列挙型」とも呼ばれます)、読み取り専用プロパティ、文字列キーを使用した配列の解凍など、いくつかの改善が含まれています。[82]

列挙型のサポート

列挙型のサポートは、PHP8.1の最も顕著な機能の1つでした。[83]列挙型を使用すると、開発者はプログラムでコードベースに状態を適用できます。以下は列挙型の例です。

<?php

名前空間 App \ Enums ;

列挙 型InvoiceStatus  文字列 {
    ケース ドラフト =  'ドラフト' ; 
    ケース 保留中 =  '保留中' ; 
    支払われたケース = '支払われた' ; ケースの有効期限が切れました= '期限切れ' ; }  
       

その他のPHP8.1の機能

  • `readonly`プロパティのサポートが追加されました。
  • PHP 7.4で連続番号キーを使用した配列アンパックが導入された後、PHP8.1では文字列キーを使用した配列アンパックのサポートが導入されました。
  • PHP 8.1では、初期化子で `new`を使用するためのサポートが追加されました。
  • 呼び出し可能オブジェクトを作成するための新しい構文が追加されました。
  • PHP 8.1では、PHP 8.0で共用体型が導入された後、純粋な交差型がサポートされるようになりました。

リリース履歴

バージョン 発売日 [84]までサポート ノート
Old version, no longer maintained: 1.0 1995年6月8日 正式には「パーソナルホームページツール(PHPツール)」と呼ばれます。これは、「PHP」という名前の最初の使用です。[9]
Old version, no longer maintained: 2.0 1997年11月1日 正式には「PHP / FI2.0」と呼ばれます。これは、実際にPHPとして特徴付けられる最初のリリースであり、今日まで耐えてきた多くの機能を備えたスタンドアロン言語です。
Old version, no longer maintained: 3.0 1998年6月6日 2000年10月20日[84] 開発は1人から複数の開発者に移ります。ZeevSuraskiとAndiGutmansは、このバージョンのベースを書き直しました。[9]
Old version, no longer maintained: 4.0 4.0 2000年5月22日[85] 2001年6月23日[84] Zendエンジンと呼ばれるより高度な2段階の解析/実行タグ解析システムが追加されました。[86]
Old version, no longer maintained: 4.1 2001年12月10日[87] 2002年3月12日[84] 「スーパーグローバル」(、、、$_GETなど$_POSTを導入[86]$_SESSION
Old version, no longer maintained: 4.2 2002年4月22日[88] 2002年9月6日[84] デフォルトでは無効register_globalsになっています。ネットワークを介して受信したデータは、グローバル名前空間に直接挿入されなくなり、アプリケーションのセキュリティホールの可能性がなくなります。[86]
Old version, no longer maintained: 4.3 2002年12月27日[89] 2005年3月31日[84] CGIを補足するために、コマンドラインインターフェイス(CLI)が導入されました。[86] [90]
Old version, no longer maintained: 4.4 2005年7月11日[91] 2008年8月7日[84] PHPバージョン4.3.xに対してコンパイルされた拡張機能とのバイナリ互換性を破る必要があったメモリ破損のバグを修正しました。[92]
Old version, no longer maintained: 5.0 2004年7月13日[93] 2005年9月5日[84] 新しいオブジェクトモデルを備えたZendEngineII。[94]
Old version, no longer maintained: 5.1 2005年11月24日[95] 2006年8月24日[84] 再設計されたPHPエンジンにコンパイラ変数を導入することでパフォーマンスが向上しました。[94]データベースにアクセスするための一貫したインターフェースとしてPHPデータオブジェクト(PDO)を追加しました。[96]
Old version, no longer maintained: 5.2 2006年11月2日[97] 2011年1月6日[84] フィルタ拡張機能をデフォルトで有効にしました。ネイティブJSONのサポート。[94]
Old version, no longer maintained: 5.3 2009年6月30日[98] 2014年8月14日[84] 名前空間のサポート。後期静的バインディング、ジャンプラベル(限定goto)、無名関数クロージャ、PHPアーカイブ(phar)、循環参照のガベージコレクション、 Windowsサポートの改善、sqlite3、 MySQLで動作する拡張機能の基盤ライブラリとしてのlibmysqlの代わりとしてのmysqlnd 、より良いMIMEサポート、国際化拡張、およびereg拡張の非推奨の ためのmime_magicの代わりとしてのfileinfo 。
Old version, no longer maintained: 5.4 2012年3月1日[99] 2015年9月3日[84] 特性のサポート、短い配列の構文のサポート。削除さregister_globalssafe_modeアイテム:allow_call_time_pass_reference、、、、、および組み込みのWebサーバー。[100]既存の機能、パフォーマンス、およびメモリ要件の削減に対するいくつかの改善。 session_register()session_unregister()session_is_registered()
Old version, no longer maintained: 5.5 2013年6月20日[101] 2016年7月10日[102] ジェネレーターサポート、finally例外処理用のブロック、公式ディストリビューションにバンドルされているOpCache(Zend Optimizer +に基づく)。[103]
Old version, no longer maintained: 5.6 2014年8月28日[104] 2018年12月31日[102] 定数スカラー式、可変個引数関数、引数の解凍、新しいべき乗演算子、use関数と定数のステートメントの拡張phpdbg、SAPIモジュールとしての新しいデバッガー、およびその他の小さな改善。[105]
6.x リリースされていません 該当なし ネイティブUnicodeサポートを含めることを計画していたPHPの放棄されたバージョン。[106] [107]
Old version, no longer maintained: 7.0 2015年12月3日[108] 2019年1月10日[52] Zend Engine 3(パフォーマンスの向上[50]およびWindowsでの64ビット整数のサポート[109])、統一変数構文、[54] ASTベースのコンパイルプロセス、[110]追加[111]プラットフォーム間でのビット単位のシフトの一貫性、[ 112]null合体)演算子、[113] Unicodeコードポイントエスケープ構文[114]戻り型宣言、[65]スカラー型(整数、浮動小数点、文字列、ブール)宣言、[66]「宇宙船」の3者間比較演算子、[115]ジェネレータClosure::call() ?? <=> 委任、[116] 匿名クラス[117]よりシンプルで一貫して利用可能なCSPRNG API、[118]残りの多くの内部PHP「エラー」をより新しい例外で置き換える[53]、名前空間から複数のアイテムをインポートするための省略構文。[119]
Old version, no longer maintained: 7.1 2016年12月1日 2019年12月1日[102] void return type[120]クラス定数可視性修飾子[121]
Old version, no longer maintained: 7.2 2017年11月30日 2020年11月30日[102] オブジェクトパラメータと戻り型の宣言、[122] Libsodium拡張、[123]抽象メソッドのオーバーライド、[124]パラメータ型の拡張[125]
Old version, no longer maintained: 7.3 2018年12月6日[126] 2021年12月6日 柔軟なヒアドキュメントとNowdoc構文、[127] list()による参照代入と配列分解のサポート、 [128] PCRE2サポート、[129] hrtime()関数[130]
Older version, yet still maintained: 7.4 2019年11月28日[131] 2022年11月28日 型付きプロパティ2.0、[132]プリロード、[133] null合体代入演算子、[134] openssl_random_pseudo_bytesの改善、[135]弱い参照、[79] FFI – 外部関数インターフェース[136]常に利用可能なハッシュ拡張、[137]パスワードハッシュレジストリ、[138]マルチバイト文字列分割、[139]参照の反映、[140] ext / wddxのバンドル解除、[141]新しいカスタムオブジェクトシリアル化メカニズム[142]
Older version, yet still maintained: 8.0 2020年11月26日[143] 2023年11月26日 Just-In-Time(JIT)コンパイル[69]負のインデックスで始まる配列、[144]より厳密な/ saner言語セマンティクス(抽象特性メソッドの検証)、[145]文字列と数値の比較、[146] saner数値文字列、[147]無効な算術/ビット単位演算子のTypeError、[148]さまざまなエンジンエラーの再分類、[149]内部関数の一貫した型エラー、[150]互換性のないメソッドシグネチャの致命的なエラー[151])、ロケールに依存しないfloat文字列への変換、[152]変数構文の微調整、[153]属性、[154] [155] [156] [157]名前付き引数、 [158]一致式、 [159]コンストラクタープロパティの昇格、 [160]共用体型、 [161]混合型、 [162]静的戻り型、 [163] nullsafe演算子、 [78]非キャプチャーキャッチ、 [164]スロー式、 [77] JSON拡張機能は常に使用可能です。[165]
Current stable version: 8.1 2021年11月25日 2024年11月25日 明示的な8進整数リテラル表記、[166]列挙型、[167]読み取り専用プロパティ、[168]ファーストクラスの呼び出し可能構文、[169]初期化子の新機能、[170]純粋な交差型、[171]決して型を返さない、[172]最終クラスの制約、[173]ファイバー[174]
伝説:
古いバージョン
古いバージョン、まだ維持されています
最新バージョン
最新のプレビューバージョン
将来のリリース

2011年6月28日以降、PHP開発チームは新しいバージョンのPHPのリリースのタイムラインを実装しました。[52]このシステムでは、少なくとも1つのリリースが毎月発生する必要があります。年に1回、新機能を含む可能性のあるマイナーリリースが発生するはずです。すべてのマイナーリリースは、セキュリティとバグの修正で少なくとも2年間サポートされ、その後、セキュリティ修正のみで少なくとも1年間、マイナーリリースごとに合計3年間のリリースプロセスがサポートされる必要があります。小さくて自己完結型でない限り、3年間のリリースプロセス中にマイナーリリースに新機能が導入されることはありません。

マスコット

elePHPant、PHPマスコット

PHPプロジェクトのマスコットは、1998年にVincent Pontier [175]によって設計された、側面にPHPロゴが付いた青い象であるelePHPantです。[ 176 ] PHP)の文字は、横向きの角度。」[177] elePHPantは、ぬいぐるみのをしていると色が変わることがあります。

このマスコットの多くのバリエーションが何年にもわたって作られてきました。Vincent Pontierによるオリジナルのデザインに基づくelePHPantsのみが、コミュニティによって公式と見なされます。[178]これらは収集可能であり、それらのいくつかは非常にまれです。[179]

構文

ローカルホスト開発サーバーで実行されているPHP7.4の「HelloWorld」アプリケーション

次の「Hello、World!」プログラムは、 HTMLドキュメント に埋め込まれたPHPコードで記述されています。

<!DOCTYPE html> 
< html > 
    < head > 
        < title > PHP "Hello、World!" プログラム</タイトル> 
    </ヘッド> 
    <ボディ>
        <?php
            echo  '<p> Hello、World!</ p>' ;
        ?>
    </本文> 
</ html >

ただし、PHPコードをHTMLに埋め込む必要はないため、Hello、World!の最も単純なバージョンです。純粋なPHPコードを含むファイルでは優先的に終了タグを省略して、このように書くことができます[180]?>

<?php echo'Hello 
     World! ' ; 
?>

PHPインタープリターは、区切り文字内でのみPHPコードを実行しますPHP以外のテキストは、PHPコードで記述された制御構造の対象となりますが、区切り文字以外のものはPHPによって処理されません。最も一般的な区切り文字は、 PHPセクション<?phpを開いたり閉じたりすることです。短縮形もあります。この短い区切り文字は、スクリプトファイルの移植性を低下させます。これは、ローカルPHP構成でスクリプトファイルのサポートを無効にできるため、推奨されないためです。[181] [182]逆に、エコーショートタグに対する推奨事項はありません[183] PHP 5.4.0より前のこの短い構文は?><?<?=echoshort_open_tag構成設定が有効になっていますが、PHP5.4.0以降では常に使用できます。[184] [185] [181]これらすべての区切り文字の目的は、 JavaScriptコードやHTMLマークアップなどの非PHPコンテンツからPHPコードを分離することです。[186] つまり、最短の「Hello、World!」PHPで書かれた プログラムは次のとおりです。

<?= 'Hello、World!' ;

区切り文字の最初の形式で<?phpありXHTMLおよびその他のXMLドキュメントでは、正しく形成されたXML処理命令を作成します。[187]これは、サーバー側ファイルでのPHPコードと他のマークアップの結果の混合は、それ自体が整形式のXMLであることを意味します。 ?>

変数の前にはドル記号が付いており、タイプを事前に指定する必要はありません。PHP 5では、関数がパラメーターを特定のクラス、配列、インターフェイス、またはコールバック関数のオブジェクトにすることを可能にする型宣言が導入されました。ただし、PHP 7より前では、型宣言は整数や文字列などのスカラー型では使用できませんでした。[66]

以下は、PHP変数がどのように宣言および初期化されるかの例です。

<?php 
    $ name  =  'ジョン' ;   //宣言され初期化される文字列型の変数
    $ age  =  18 ;        //宣言され、初期化される整数型の変数
    $ height  =  5.3 ;    //宣言され初期化されたdouble型の変数
    echo  $ name   'は' です。 $ height   '背が高い\ n' ;  //変数と文字列を連結する
    echo  " $ name is $ age yearsold。" ;  //変数を文字列に補間します
か?>

関数名やクラス名とは異なり、変数名では大文字と小文字が区別されます。二重引用符で囲まれた( "")文字列とヒアドキュメント文字列はどちらも、変数の値を文字列に補間する機能を提供します。[188] PHPは、改行を自由形式の言語のように空白として扱い、ステートメントはセミコロンで終了します。[189] PHPには、3種類のコメント構文があります。マークブロックコメントとインラインコメント。または1行のコメントに使用されます。[190]このステートメントは、PHPがテキストを出力するために提供するいくつかの機能の1つです。 /* *///#echo

キーワードと言語構文の点では、PHPはCスタイルの構文に似ています。if条件、forループwhile、および関数の戻り値は、構文がC、C ++、C#、Java、Perlなどの言語に似ています。

データ型

PHPは大まかに型付けされています。プラットフォームに依存する範囲の整数を、 C言語のlong型と同等の32、64、または128ビットの符号付き 整数として格納します。符号なし整数は、特定の状況で符号付き値に変換されます。これは、他の多くのプログラミング言語とは異なる動作です。[191]整数変数は、10進数(正と負)、8進数16進数、および2進数の表記を使用して割り当てることができます。

浮動小数点数もプラットフォーム固有の範囲に格納されます。これらは、浮動小数点表記、または2つの形式の科学的記数法を使用して指定できます。[192] PHPには、JavaおよびC ++のネイティブブール型に類似したネイティブブール型がありますPerlやC ++の場合と同様に、ブール型変換ルールを使用すると、ゼロ以外の値はtrueとして解釈され、ゼロはfalseとして解釈されます。[192]

nullデータ型は、値のない変数を表します。NULLこのデータ型で許可される唯一の値です。[192]

「リソース」タイプの変数は、外部ソースからのリソースへの参照を表します。これらは通常、特定の拡張機能の関数によって作成され、同じ拡張機能の関数によってのみ処理できます。例には、ファイル、イメージ、およびデータベースリソースが含まれます。[192]

配列には、リソース、オブジェクト、さらには他の配列など、PHPが処理できる任意のタイプの要素を含めることができます。順序は、値のリストと、キーと値の両方を含むハッシュで保持され、2つを混在させることができます。[192] PHPは文字列もサポートしており、一重引用符、二重引用符、nowdocまたはheredoc構文で使用できます[193]

標準PHPライブラリ(SPL)は、標準の問題を解決しようとし、効率的なデータアクセスインターフェイスとクラスを実装します。[194]

関数

PHPはコア言語で多数の関数を定義しており、その多くはさまざまな拡張機能でも利用できます。これらの関数は、オンラインのPHPドキュメントに詳しく記載されています。[195]ただし、上記の履歴で説明したように、組み込みライブラリにはさまざまな命名規則と関連する不整合があります。

カスタム関数は、開発者が定義できます。

function  myAge int  $ birthYear  string 
{ 
    //現在の年から誕生年を引いて年齢を計算します。
    $ yearsOld  =  date 'Y'  -  $ birthYear ;

    //説明的な文字列で年齢を返します。
    $ yearsOldを返します '年' $ yearsOld != 1 's' '' ); }        


echo  '私は現在' です。 myAge 1995   ' 年。' ;

2022年には、上記のサンプルプログラムの出力は「私は現在27歳です」です。

関数ポインタの代わりに、PHPの関数は、その名前を含む文字列で参照できます。このようにして、通常のPHP関数を、たとえばコールバックとして、または関数テーブル内で使用できます。[196]ユーザー定義関数は、プロトタイプを作成せずにいつでも作成できます[195] [196]関数はコードブロック内で定義でき、関数を定義する必要があるかどうかを実行時に決定できます。function_exists指定された名前の関数がすでに定義されているかどうかを判別する関数があります。引数がゼロのクラスコンストラクターを除いて、関数呼び出しでは括弧を使用する必要がありますPHP演算子newで呼び出される関数。この場合、括弧はオプションです。

PHP 5.3までは、無名関数クロージャのサポートはPHPには存在しませんでした。create_function()PHP 4.0.1以降に存在していましたが、プログラムの実行中に通常のPHP関数を作成できるようにするための単なる薄いラッパーですeval()[197] PHP 5.3は、周囲のスコープから変数をキャプチャできる無名関数または「クロージャ[198]を定義する構文を追加しました。PHP 7.4で短縮矢印構文が追加されました:[199]

function  getAdder $ x  { 
    return  fn $ y  =>  $ x  +  $ y ; 
}

$ adder  =  getAdder 8 ); 
echo  $ adder 2 );  //「10」を出力します

上記の例では、getAdder()関数は渡された引数を使用してクロージャを作成し$x(キーワードuseは字句コンテキストから変数をインポートします)、追加の引数を取り、$y作成されたクロージャを呼び出し元に返します。このような関数はファーストクラスのオブジェクトです。つまり、変数に格納したり、他の関数にパラメーターとして渡すことができます。 [200]

動的型付け言語では珍しく、PHPは関数パラメーターの型宣言をサポートします。これは実行時に適用されます。これは、PHP 5.0以降のクラスとインターフェイス、PHP 5.1以降の配列、PHP 5.4以降の「呼び出し可能オブジェクト」、およびPHP 7.0以降のスカラー(整数、浮動小数点、文字列、ブール)型でサポートされています。[66] PHP 7.0には、関数の戻り型の型宣言もあります。これは、パラメーターのリストの後にコロンを付けて型名を配置することで表されます。[65]たとえばgetAdder、前の例の関数は、PHP7で次のような型で注釈を付けることができます。

function  getAdder int  $ x  Closure 
{ 
    return  fn int  $ y  int  =>  $ x  +  $ y ; 
}

$ adder  =  getAdder 8 ); 
echo  $ adder 2 );  //「10」を出力します
echo  $ adder null );  //間違ったタイプが渡されたため、例外をスローします
$ adder  =  getAdder ([]);  //例外もスローします

デフォルトでは、スカラー型宣言は弱い型付けの原則に従います。したがって、たとえば、パラメーターの型がである場合int、PHPは整数だけでなく、変換可能な数値文字列、浮動小数点数、またはブール値もその関数に渡すことを許可し、それらを変換します。[66]ただし、PHP 7には「厳密な型付け」モードがあり、これを使用すると、関数呼び出しのそのような変換が許可されず、ファイル内で返されます。[66]

PHPオブジェクト

基本的なオブジェクト指向プログラミング機能がPHP3で追加され、PHP 4で改善されました。[9]これにより、PHPはさらに抽象化され、言語を使用するプログラマーにとって創造的なタスクが容易になります。オブジェクト処理はPHP5用に完全に書き直され、機能セットが拡張され、パフォーマンスが向上しました。[201]以前のバージョンのPHPでは、オブジェクトは値型のように扱われていました。[201]このメソッドの欠点は、渡されたオブジェクトのコピーを作成するのではなく、変更する場合、コードがPHPの「参照」変数を多用する必要があることでした。新しいアプローチでは、オブジェクトは値ではなくハンドルによって参照されます。

PHP 5では、抽象クラス最終クラス抽象メソッド、および最終メソッドとともに、プライベートおよび保護されたメンバー変数とメソッドが導入されました。また、 C ++などの他のオブジェクト指向言語と同様に、コンストラクタデストラクタを宣言する標準的な方法と、標準の例外処理モデルを導入しました。さらに、PHP 5はインターフェースを追加、複数のインターフェースを実装できるようにしました。オブジェクトがランタイムシステムと対話できるようにする特別なインターフェイスがあります。ArrayAccessを実装するオブジェクトは、IteratorまたはIteratorAggregateを実装する配列構文およびオブジェクトは、foreach 言語構成で使用できますエンジンには仮想テーブル機能がないため、静的変数はコンパイル時に参照ではなく名前でバインドされます。[202]

開発者が予約語を使用してオブジェクトのコピーを作成する場合、cloneZendエンジンは__clone()メソッドが定義されているかどうかを確認します。__clone()そうでない場合は、オブジェクトのプロパティをコピーするデフォルトを呼び出します。メソッドが定義されている場合__clone()、作成されたオブジェクトに必要なプロパティを設定する責任があります。便宜上、エンジンはソースオブジェクトのプロパティをインポートする関数を提供するため、プログラマーはソースオブジェクトの値によるレプリカから始めて、変更が必要なプロパティのみをオーバーライドできます。[203]

PHPのプロパティとメソッド可視性は、キーワード、、、 publicおよびprivateを使用して定義されprotectedます。varのみが使用されている場合、デフォルトはpublicです。varの同義語ですpublic宣言されたアイテムはpublicどこからでもアクセスできます。継承されたクラス(およびアイテムを定義するクラス)へのprotectedアクセスを制限します。アイテムを定義するクラスのみに可視性を制限します。[204]同じタイプのオブジェクトは、同じインスタンスでなくても、互いのプライベートメンバーと保護されたメンバーにアクセスできます。 private

以下は、PHP8でのオブジェクト指向プログラミングの基本的な例です。

<?php

抽象 クラス ユーザー
{{
    保護された 文字列 $ name ;

    パブリック 関数 __construct 文字列 $ name 
    {{
        //最初の文字を大文字にし、残りを小文字にします
        $ this- > name  =  ucfirst strtolower $ name ));
    }

    public  function  greet () 文字列
    {{
         「こんにちは、私の名前は」を 返します。 $ this- > name ;
    }

    抽象 パブリック 関数 ジョブ() 文字列;
}

クラス Student  Userを拡張します
{{
    パブリック 関数 __construct 文字列 $ name  プライベート 文字列 $ course 
    {{
        :: __ construct $ name );
    }

    パブリック 関数 ジョブ() 文字列
    {{
         「私は学ぶ」を 返します。 $ this- >コース;
    }
}

クラス 教師  ユーザーを拡張します
{{
    パブリック 関数 __construct 文字列 $ name  プライベート 配列 $ TeachingCourses 
    {{
        :: __ construct $ name );
    }

    パブリック 関数 ジョブ() 文字列
    {{
         「私は教える」を 返します。 implode "、"  $ this- > TeachingCourses );
    }
}

$ student  =  [
    新入生 「アリス」コンピュータサイエンス」)、 
    新入生 「BOB」コンピュータサイエンス」)、 
    新入生 「チャーリー」「ビジネス研究」 
];

$ Teachers  =  [
    新しい 先生「ダン」 [ 「コンピュータサイエンス」 「情報セキュリティ」])、
    新しい 先生"エリン"  [ "コンピュータサイエンス"  "3Dグラフィックスプログラミング" ])、
    新しい 教師「フランキー」 [ 「オンラインマーケティング」 「ビジネス研究」 「Eコマース」])、
];

foreach  ([ $ student  $ Teachers ]  as  $ users  {
    echo  $ users [ 0 ] ::クラス  "s:\ n " ;

    array_walk $ users  function  User  $ user  {
        echo  " { $ user- > greet ()} { $ user- > job ()} \ n " ;
    });
}

//プログラムの出力:
// 学生:
//こんにちは、私の名前はアリスです。コンピュータサイエンスを学びます
//こんにちは、私の名前はボブです。コンピュータサイエンスを学びます
//こんにちは、私の名前はチャーリーです、私はビジネス研究を学びます
//教師:
//こんにちは、私の名前はダンです。コンピュータサイエンス、情報セキュリティを教えています
//こんにちは、私の名前はエリンです。コンピュータサイエンス、3Dグラフィックスプログラミングを教えています
//こんにちは、私の名前はフランキーです。オンラインマーケティング、ビジネススタディ、Eコマースを教えています。

実装

唯一の完全なPHP実装は、単にPHPとして知られているオリジナルです。これは最も広く使用されており、ZendEngineを搭載しています。他の実装と明確にするために、非公式に「ZendPHP」と呼ばれることもあります。Zend Engineは、 PHPソースコードをオンザフライで実行可能な内部形式にコンパイルするため、インタープリターとして機能します。[205] [206] PHPには正式な仕様がないため、これはPHPの「リファレンス実装」でもあり、ZendPHPのセマンティクスはPHPのセマンティクスを定義します。Zendの動作によって定義されるPHPの複雑で微妙なセマンティクスのため、競合する実装が完全な互換性を提供することは困難です。

PHPのスクリプト実行ごとの単一リクエストモデル、およびZend Engineがインタープリターであるという事実は、非効率につながります。その結果、PHPのパフォーマンスを向上させるためにさまざまな製品が開発されました。実行時間を短縮し、WebページにアクセスするたびにPHPソースコードをコンパイルする必要がないように、コンパイルされた形式のをキャッシュすることで機能するopcodeキャッシュを使用して、PHPスクリプトをPHPエンジンの内部形式でデプロイすることもできます。スクリプトを実行するたびにコードを解析およびコンパイルするオーバーヘッドを回避するための共有メモリ内のPHPスクリプト(opcodes) 。バージョン5.5以降、オペコードキャッシュであるZendOpcacheがPHPに組み込まれています。[207]広く使用されているオペコードキャッシュのもう1つの例は、 PECL拡張機能として利用できるAlternative PHP Cache(APC)です。[208]

Zend PHPは依然として最も人気のある実装ですが、他のいくつかの実装が開発されています。これらの一部はコンパイラーであるか、 JITコンパイルをサポートしているため、完全なPHP互換性がないという犠牲を払って、ZendPHPよりもパフォーマンス上の利点があります。代替の実装には、次のものがあります。

  • HHVM(HipHop Virtual Machine)– Facebookで開発され、オープンソースとして利用可能で、PHPコードを高レベルのバイトコード(一般に中間言語として知られています)に変換し、実行時にx86-64マシンコードに動的に変換します。ジャストインタイム(JIT)コンパイラーにより、パフォーマンスが最大6倍向上します。[209]ただし、バージョン7.2 ZendはHHVMを上回っているため、[210]、HHVM3.24はPHPを公式にサポートする最後のバージョンです。[211]
  • Parrot  –動的言語を効率的に実行するように設計された仮想マシン。Pippは、PHPソースコードをParrot中間表現に変換します。これは、Parrotのバイトコードに変換され、仮想マシンによって実行されます。
  • PeachPie –の第2世代コンパイラ。Roslynプラットフォーム上に構築されたNET 共通中間言語(CIL)バイトコード。Phalangerの後継者であり、いくつかのアーキテクチャコンポーネントを共有しています
  • Phalanger –PHPをCommonIntermediate  Language(CIL)バイトコードにコンパイルします。PeachPieの前身
  • Quercus  –PHPをJavaバイトコードにコンパイルします
  • HipHop  – Facebookで開発され、オープンソースとして利用可能で、PHPスクリプトをC ++コードに変換し、結果のコードをコンパイルして、サーバーの負荷を最大50%削減します。create_function()2013年の初めに、Facebookは、デプロイメントの難しさや、および構造を含むPHP言語全体のサポートの欠如など、複数の理由により、HHVMを支持して非推奨にしましたeval()[212]

ライセンス

PHPは、 PHPライセンスの下でリリースされたフリーソフトウェアであり、次のように規定されています。[213]

[email protected]からの書面による事前の許可なしに、このソフトウェアから派生した製品を「PHP」と呼ぶことも、「PHP」を名前に表示することもできません。「PHPFoo」または「phpfoo」と呼ぶ代わりに「FooforPHP」 言うことで、ソフトウェアがPHPと連携して動作することを示すことができます。

「PHP」の使用に関するこの制限により、PHPライセンスはGeneral Public License (GPL)と互換性がなくなりますが、Zendライセンスは、元のBSDライセンスと同様の広告条項のために互換性がありません[214]

開発とコミュニティ

PHPのソースディストリビューションには、さまざまなフリーおよびオープンソースライブラリが含まれているか、結果として得られるPHPバイナリビルドでそれらを使用します。PHPは基本的にインターネット対応システムであり、ファイル転送プロトコル(FTP)サーバーや、 PostgreSQLMySQLMicrosoft SQL ServerSQLite(組み込みデータベース)、LDAPサーバーなどの多くのデータベースサーバーにアクセスするためのモジュールが組み込まれています。 stdioファミリーの関数など、Cプログラマーに馴染みのある多数の関数が、標準のPHPビルドで使用できます。[215]

PHPを使用すると、開発者Cで拡張機能を記述して、PHP言語に機能を追加できます。PHP拡張機能は、静的にPHPにコンパイルすることも、実行時に動的にロードすることもできます。Windows API 、 Unixライクなオペレーティングシステムでのプロセス管理、マルチバイト文字列(Unicode)、cURL、およびいくつかの一般的な圧縮形式のサポートを追加するために、多数の拡張機能が作成されています拡張機能を通じて利用できるその他のPHP機能には、IRCとの統合、画像とAdobe Flashコンテンツの動的生成、PHPデータオブジェクトが含まれます。 (PDO)データベースへのアクセスに使用される抽象化レイヤーとして、[216] [217] [218] [219] [220] [221] [222]、さらには音声合成文字列や配列を処理する機能など、言語のコア機能の一部も拡張機能として実装されています。[223] PHP Extension Community Library(PECL)プロジェクトは、PHP言語の拡張機能のリポジトリです[224]

Zephirなどの他のいくつかのプロジェクトでは、PHP拡張機能を高級言語で作成し、ネイティブPHP拡張機能にコンパイルする機能を提供しています。このようなアプローチは、PHP拡張機能をCで直接記述する代わりに、拡張機能の開発を簡素化し、プログラミングとテストに必要な時間を短縮します。[225]

2018年12月までに、PHPグループは10人で構成されました:Thies C. ArntzenStig BakkenShane CaraveoAndi GutmansRasmus LerdorfSam RubySascha SchumannZeev SuraskiJim WinsteadAndreiZmievski[226]

Zend Technologiesは、プログラマーが認定PHP開発者になるために、PHP 7 [227]試験に基づく(以前はPHP 5.5に基づく) PHP認定を提供しています。

インストールと構成

PHP 7.1でのphpinfo()関数の出力例

PHPのサポートをWebサーバーに追加するには、ネイティブWebサーバーモジュールとして、またはCGI実行可能ファイルとして2つの主要な方法があります。PHPには、サーバーアプリケーションプログラミングインターフェイス(SAPI)と呼ばれる直接モジュールインターフェイスがあり、Apache HTTPサーバーMicrosoft IISiPlanetWebサーバーなどの多くのWebサーバーでサポートされていますOmniHTTPdなどの他の一部のWebサーバーは、 MicrosoftのWebサーバーモジュールインターフェイスであるインターネットサーバーアプリケーションプログラミングインターフェイス(ISAPI)をサポートしています。PHPにWebサーバーのモジュールサポートがない場合は、 Common Gateway Interface(CGI)またはFastCGIとしていつでも使用できます。プロセッサ; その場合、Webサーバーは、PHPのCGI実行可能ファイルを使用してPHPファイルへのすべての要求を処理するように構成されます。[228]

PHP-FPM(FastCGI Process Manager)は、PHPの代替FastCGI実装であり、バージョン5.3.3以降の公式PHPディストリビューションにバンドルされています。[229]以前のFastCGI実装と比較すると、いくつかの追加機能が含まれており、主に負荷の高いWebサーバーに役立ちます。[230]

コマンドラインスクリプトにPHPを使用する場合は、PHPコマンドラインインターフェイス(CLI)実行可能ファイルが必要です。PHPは、PHP 4.3.0以降、CLIサーバーアプリケーションプログラミングインターフェイス(SAPI)をサポートしています。[231]このSAPIの主な焦点は、PHPを使用したシェルアプリケーションの開発です。CLI SAPIと他のSAPIの間にはかなりの違いがありますが、それらは同じ動作の多くを共有しています。[232]

PHPには、さまざまなWebサーバー用のSAPIと呼ばれる直接モジュールインターフェイスがあります。[233] Windows上のPHP5およびApache2.0の場合、php5apache2.dllと呼ばれるDLLファイルの形式で提供されます[ 234 ] これは、他の機能の中でも、PHPとWebサーバー間のインターフェイスを提供するモジュールです。 、サーバーが理解できる形式で実装されます。この形式は、SAPIと呼ばれるものです。

さまざまなWebサーバー拡張機能にはさまざまな種類のSAPIがあります。たとえば、上記のリストに加えて、PHP言語用の他のSAPIには、Common Gateway Interface(CGI)およびコマンドラインインターフェイス(CLI)が含まれます。[233] [235]

PHPは、 PHP-GTK拡張機能を使用して、デスクトップのグラフィカルユーザーインターフェイス(GUI)アプリケーションを作成するためにも使用できます。PHP-GTKは公式のPHPディストリビューション[228]には含まれておらず、拡張機能として、PHPバージョン5.1.0以降でのみ使用できます。PHP-GTKをインストールする最も一般的な方法は、ソースコードからコンパイルすることです。[236]

PHPがクラウド環境にインストールされて使用される場合、クラウド固有の機能を使用するためのソフトウェア開発キット(SDK)が提供されます。例えば:

多数の構成オプションがサポートされており、PHPのコア機能と拡張機能の両方に影響を与えます。[239] [240]php.ini PHPの使用方法に応じて、さまざまな場所で構成ファイルが検索されます。[241]構成ファイルはさまざまなセクションに分割されていますが[242]、一部の構成オプションはWebサーバー構成内でも設定できます。[243]

を使用

Squidと一緒にここに表示されるLAMPソフトウェアバンドルの概要

PHPは、サーバー側の Web開発に特に適した汎用スクリプト言語です。この場合、PHPは通常Webサーバー上で実行されます。要求されたファイル内のすべてのPHPコードは、PHPランタイムによって実行されます。通常、動的WebページコンテンツまたはWebサイトやその他の場所で使用される動的画像を作成します。[244]コマンドラインスクリプトおよびクライアント側の グラフィカルユーザーインターフェイス(GUI)アプリケーションにも使用できます。PHPは、ほとんどのWebサーバー、多くのオペレーティングシステムおよびプラットフォームにデプロイでき、多くのリレーショナルデータベース管理システムで使用できます。(RDBMS)。ほとんどのウェブホスティングプロバイダーは、クライアントが使用するためにPHPをサポートしています。これは無料で利用でき、PHP Groupは、ユーザーが自分で使用するために構築、カスタマイズ、および拡張するための完全なソースコードを提供します。[13]

動的Webページ:サーバーサイドスクリプトの例(PHPおよびMySQL)

もともと動的Webページを作成するために設計されたPHPは、現在主にサーバー側スクリプトに焦点を当てており[245]、Webサーバーからクライアントに動的コンテンツを提供する他のサーバー側スクリプト言語( MicrosoftASPなど)に似ています。 .NETSunMicrosystemsJavaServerPages[246]およびmod_perlPHPは、迅速なアプリケーション開発(RAD)を促進するためのビルディングブロックと設計構造を提供する多くのソフトウェアフレームワークの開発も引き付けています。これらのいくつかには、PRADOCakePHPが含まれますSymfonyCodeIgniterLaravelYii FrameworkPhalconLaminas 、他のWebフレームワークと同様の機能を提供します

LAMPアーキテクチャは、Webアプリケーションを展開する方法としてWeb業界で人気があります。[247] PHPは、 LinuxApacheMySQLと並んでこのバンドルのPとして一般的に使用されていますが、PはPythonPerl、またはこれら3つの組み合わせを指す場合もあります。同様のパッケージであるWAMPMAMPは、 WindowsmacOSでも利用できます。、最初の文字はそれぞれのオペレーティングシステムを表します。PHPとApacheの両方がmacOSベースインストールの一部として提供されていますが、これらのパッケージのユーザーは、より簡単に最新の状態に保つことができる、よりシンプルなインストールメカニズムを求めています。

特定のより高度な使用シナリオのために、PHPは、 CまたはC ++でカスタム拡張機能を作成するための明確に定義され文書化された方法を提供します[248] [249] [250] [251] [252] [253] [254]言語自体を追加のライブラリの形で拡張することに加えて、拡張は、それが重要であり、真のコンパイル言語を使用することによる改善。[255] [256] PHPは、他のソフトウェアプロジェクトに自分自身を埋め込むための明確に定義された方法も提供します。そうすれば、PHPを内部スクリプト言語として簡単に使用できます。別のプロジェクトの場合は、プロジェクトの特定の内部データ構造との緊密なインターフェイスも提供します[257]

スレッドの使用は「pthreads」 PECL拡張機能によって可能になりますが、 PHPは、コア言語レベルでのマルチスレッドのサポートが不足しているため、さまざまなレビューを受けました[258] 。[259] [260]

コマンドラインインターフェイス、php-cli、およびPHP用の2つのActiveX Windows ScriptHostスクリプトエンジンが作成されました。

人気と使用統計

PHPは、 MediaWiki[261] WordPress[262] Joomla[263] Drupal[264] Moodle[265] eZ PublisheZ PlatformSilverStripeなどのWebコンテンツ管理システムに使用されます。[266]

PHPを使用するWebサイトには、Facebook[267] Digg[268] Dailymotion[269]Tumblrなどがあります。[270]

2013年1月の時点で、PHPは2億4000万を超えるWebサイト(サンプリングされたWebサイトの39%)で使用され、210万のWebサーバーにインストールされました[271]

2021年3月の時点で、PHPはウェブサイトの79.1%でサーバー側プログラミング言語として使用されていました。これは、言語を決定できる以前の83.5%から減少し、PHP 7は、言語の最も使用されているバージョンであり、全体の50.3%を占めています。 Web上のWebサイトはそのバージョンを使用しています。[272]

セキュリティ

2019年には、National Vulnerability Databaseにリストされているすべての脆弱性の11%がPHPにリンクされていました。[273]歴史的に、このデータベースに1996年以降にリストされたすべての脆弱性の約30%がPHPにリンクされています。言語自体またはそのコアライブラリの技術的なセキュリティ上の欠陥は頻繁ではありません(2009年には22、全体の約1%ですが、PHPはリストされているプログラムの約20%に適用されます)。[274]プログラマーが間違いを犯すことを認識して、いくつかの言語は、多くの問題を引き起こす入力検証の欠如を自動的に検出するための汚染チェックを含んでいます。このような機能はPHP用に開発されていますが[275]、リリースへの組み込みは過去に何度か拒否されています。[276] [277]

SuhosinHardening - Patchなどの高度な保護パッチがあり、特にWebホスティング環境向けに設計されています。[278]

歴史的に、古いバージョンのPHPには、そのようなランタイム設定のいくつかの構成パラメーターとデフォルト値があり、一部のPHPアプリケーションはセキュリティの問題を起こしやすくなりました。これらの中でmagic_quotes_gpcregister_globals[279]構成ディレクティブが最もよく知られていました。後者は、URLパラメータをPHP変数にし、攻撃者が初期化されていないグローバル変数の値を設定してPHPスクリプトの実行を妨害できるようにすることで、深刻なセキュリティの脆弱性への道を開きました。マジッククォート」および「グローバルの登録」設定のサポートは、PHP 5.3.0以降非推奨になり、PHP5.4.0から削除されました。[280]

潜在的なランタイム設定の脆弱性の別の例は、アップロードされたファイルが保存されているディレクトリのPHP実行を無効にできないこと(たとえば、engine構成ディレクティブを使用することによって)[281]にあります。これを有効にすると、アップロードされたファイルに埋め込まれた悪意のあるコードが実行される可能性があります。[282] [283] [284]ベストプラクティスは、Webサーバーで利用可能なドキュメントルートの外側にあるイメージディレクトリを見つけて中間スクリプトを介して提供するか、アップロードされたファイルを保存するディレクトリのPHP実行を無効にすることです。

また、共有Webホスティングenable_dl環境でPHP拡張機能の動的ロードを(構成ディレクティブを介して)有効にすると[285]セキュリティの問題が発生する可能性があります。[286] [287]

異なる値が等しいものとして扱われる結果となる暗黙の型変換は、場合によってはプログラマーの意図に反して、セキュリティの問題につながる可能性があります。たとえば、比較の結果は次のようになります。これ'0e1234' == '0'true、数値として解析可能な文字列が数値に変換されるためです。この場合、最初に比較された値は、次の値を持つ科学的記数法として扱われます(0 × 101234)、これはゼロですこのようなエラーは、 MD5パスワードハッシュを比較したときに、 Simple Machines Forum[288] Typo3 [289]、およびphpBB [290]で認証の脆弱性をもたらしました。推奨される方法は、結果として、 hash_equals()タイミング攻撃の安全性のため)またはID演算子()を使用することです。[291] strcmp==='0e1234' === '0'false

Zone-Hによって公開された170,000を超えるWebサイト改ざんの2013年の分析では、最も頻繁に(53%)使用された手法は、ファイルインクルードの脆弱性の悪用であり、主にPHP言語構造の安全でない使用に関連しています[292] [293]includerequireallow_url_fopen

2021年4月の時点で、W3Techsは、PHPを使用するWebサイトの64%がバージョン7.2以前( PHP開発チームによってサポートされなくなった)を使用し、すべてのPHP Webサイトの35%がバージョン5.6以前を使用していると報告しています。[294]

バージョン5は、まだすべてのWebサイトの24.5%で使用されています(2021年9月)。[295] PHPバージョン7または8に移行し、rand()またはmt_rand()の代わりにrandom_int()を使用することを強くお勧めします。PHPエントロピーソースに対して実行できる攻撃には、「シード攻撃」と「状態回復攻撃」の2つがあります。現在のGPUテクノロジーでは、攻撃者は250ドルのGPUで1秒あたり最大2 ^ 30のMD5計算を実行できますが、追加の500ドルで最大2 ^ 32の計算に達する可能性があります。[296] 「誕生日攻撃」と組み合わせると、深刻なセキュリティの脆弱性につながる可能性があります。

も参照してください

参考文献

  1. ^ a b Lerdorf、Rasmus(1995年6月8日)。「アナウンス:パーソナルホームページツール(PHPツール)」2011年6月7日取得
  2. ^ a b Lerdorf、Rasmus(2007-04-26)。「PHPonHormones –カリフォルニア州サンタクララで開催されたMySQLカンファレンスで発表されたRasmusLerdorfによるPHPプレゼンテーションの歴史」会話ネットワーク2009年12月11日取得
  3. ^ 「バージョン8.1.2」2022年1月20日2022年1月21日取得
  4. ^ 「PHP8.1.0Beta1がテストに利用可能」2021年7月22日2021年7月29日取得
  5. ^ 「PHP:関数の引数-手動」secure.php.net
  6. ^ ストゴフ、ドミトリー(2015-12-04)。「いくつかの#PHP7最適化のアイデアがHHVM、LuaJIT、V8から生まれたことは秘密ではありません」ツイッター。
  7. ^ 「PHP:ハイパーテキストプリプロセッサ」www.php.net 2020年2月12日取得
  8. ^ a b "PHPの歴史"php.net
  9. ^ a b c d e f g hi 「 PHP および関連プロジェクトの歴史」PHPグループ2008年2月25日取得
  10. ^ PHPマニュアル:序文、www.php.net。
  11. ^ 「はじめに:PHPで何ができるか?」PHPマニュアル2009年3月5日取得
  12. ^ ヘリコプター:ユーザーがPHP経由でParrot ARドローンを制御できるようにするnode-ar-droneのポート:jolicode / php-ar-drone、JoliCode、2019-01-11 、取得済み2019-02-23
  13. ^ a b "HTMLへのPHPの埋め込み"オライリー。2001-05-03 2008年2月25日取得
  14. ^ ジャクソン、ヨアブ(2014-07-31)。「PHPはついに正式な仕様を取得しました」ComputerworldIDG
  15. ^ 「ウェブサイトのためのPHPの使用統計」W3Techs-ワールドワイドウェブテクノロジー調査W3Techs。2021年4月26日2021年4月26日取得
  16. ^ ラードルフ、ラスマス(2012-07-20)。「なぜ人々はPHPがPerlで書かれたことがあると書き続けるのだろうか。決してそうではなかった。#php」Twitter 2014年9月4日取得
  17. ^ ラードルフ、ラスマス(2007-04-26)。「PHPonHormones」(mp3)会話ネットワーク2009年6月22日取得
  18. ^ Lerdorf、Rasmus(1995-06-08)。「アナウンス:パーソナルホームページツール(PHPツール)」ニュースグループ:  comp.infosystems.www.authoring.cgi 2006年9月17日取得
  19. ^ ラードルフ、ラスマス(2007)。「スライド3」「PHPonHormones」トークのスライドPHPグループ2009年6月22日取得
  20. ^ 「ラスマスラードルフ、シニアテクニカルヤフー:PHP、マイクの後ろ」2003-11-19。2013年7月28日にオリジナルからアーカイブされました。
  21. ^ 「PHPの問題」2010年12月20日取得
  22. ^ "php.internals:Re:関数名の一貫性"news.php.net2013-12-28 2014年2月9日取得
  23. ^ ラスマスラードルフ(2013年12月16日)。「Re:柔軟な関数の命名」ニュースグループ:  php.internals 2013年12月26日取得
  24. ^ 「PHP–頭字語意味投票」PHP.net2000年8月15日にオリジナルからアーカイブされました。
  25. ^ 「ZendEngineバージョン2.0:機能の概要と設計」Zend Technologies Ltd. 2006年7月19日のオリジナルからアーカイブ2006年9月17日取得
  26. ^ 「php.net2007ニュースアーカイブ」PHPグループ。2007-07-13 2008年2月22日取得
  27. ^ Kerner、Sean Michael(2008-02-01)。「PHP4は死んでいる—長生きするPHP5」InternetNews。2018年8月6日にオリジナルからアーカイブされました2018年12月16日取得
  28. ^ Trachtenberg、Adam(2004-07-15)。「なぜPHP5がロックするのか!」オライリー2008年2月22日取得
  29. ^ 「PHPの遅い静的バインディング」デジタルサンドイッチ。2006-02-23 2008年3月25日取得
  30. ^ 「静的キーワード」PHPグループ2008年3月25日取得
  31. ^ 「GoPHP5」2011年7月17日にオリジナルからアーカイブされました
  32. ^ GoPHP5。「PHPプロジェクトは、Go PHP 5に協力します」(PDF)GoPHP5プレスリリース2009年12月10日にオリジナル(PDF)からアーカイブされました2008年2月23日取得
  33. ^ 「GoPHP5」GoPHP5。2011年4月27日にオリジナルからアーカイブされました2008年2月22日取得
  34. ^ 「PHPのインストールと構成」php.net 2013年10月29日取得
  35. ^ 「PHPforWindows:バイナリおよびソースリリース(5.3)」php.net 2013年10月29日取得
  36. ^ 「PHPforWindows:バイナリおよびソースリリース(5.4)」php.net 2013年10月29日取得
  37. ^ 「PHPforWindows:バイナリおよびソースリリース(5.5)」php.net 2013年10月29日取得
  38. ^ 「PHP:サポートされているバージョン」
  39. ^ 「タイプ:文字列(PHPマニュアル)」PHP.net 2013年9月22日取得
  40. ^ 「文字列型の詳細(PHPマニュアル)」PHP.net 2021-09-22を取得
  41. ^ アンドレイズミエフスキー(2005-08-10)。「PHPUnicodeサポート設計ドキュメント」(メーリングリスト)2014年2月9日取得
  42. ^ 「PHP5.5または6.0」2014年2月9日取得
  43. ^ アンドレイズミエフスキー(2011-04-22)。「良いもの、悪いもの、そして醜いもの:UnicodeとPHP6に何が起こったのか」2014年2月9日取得
  44. ^ ラスマス・ラードルフ(2010-03-11)。「PHP6」(メーリングリスト)2014年2月7日取得
  45. ^ 「PHP6対PHP7の終わりのないマペット討論」2015年11月19日にオリジナルからアーカイブされました2015年11月19日取得
  46. ^ 「RFC:PHPの次のリリースの名前」php.net2014-07-07 2014年7月15日取得
  47. ^ "Re:[PHP-DEV] [VOTE] [RFC] PHPの次のリリースの名前(再び)"2014-07-30 2014年7月30日取得
  48. ^ "phpng:パフォーマンスが大幅に向上したリファクタリングされたPHPエンジン"news.php.net
  49. ^ "PHP:rfc:phpng"php.net 2014年12月16日取得
  50. ^ a b "PHP:phpng"php.net 2014年7月15日取得
  51. ^ 「マージブランチ 'ZendEngine3'" 。github.com。2014-12-05。2014-12-05取得_ _
  52. ^ a b c 「PHP:リリースプロセス」2011-06-20 2013年10月6日取得
  53. ^ a b "PHP RFC:エンジンの例外(PHP 7の場合)"php.net 2015年5月21日取得
  54. ^ a b "PHP RFC:一様変数構文"php.net2014-05-31 2014年7月30日取得
  55. ^ 「オンラインPHPエディター| udRhXの出力」3v4l.org
  56. ^ 「PHPRFC:「foreach」の動作を修正」php.net 2015年5月21日取得
  57. ^ 「PHPRFC:内部クラスのコンストラクターの振る舞い」php.net 2015年5月21日取得
  58. ^ 「PHPRFC:死んだまたはまだPHP7に移植されたSAPIと拡張機能の削除」php.net 2015年5月21日取得
  59. ^ 「PHPRFC:list()の動作の不整合を修正」php.net 2015年5月21日取得
  60. ^ 「PHPRFC:代替PHPタグを削除する」php.net 2015年5月21日取得
  61. ^ 「PHPRFC:スイッチで複数のデフォルトケースを定義することを構文エラーにする」php.net 2015年5月21日取得
  62. ^ 「PHPRFC:数値文字列の16進サポートを削除」php.net 2015年5月21日取得
  63. ^ a b "PHP RFC:整数セマンティクス"php.net 2015年5月21日取得整数にキャストするときにNaNとInfinityを常にゼロにすることは、クロスプラットフォームの一貫性が高くなることを意味し、現在生成されているものよりも驚くことではありません。
  64. ^ 「PHPRFC:オーバーフローでのZPPの失敗」php.net 2015年5月21日取得
  65. ^ a b c "RFC:リターンタイプ"php.net2015-01-27 2015年1月28日取得
  66. ^ a b c d e f "RFC:スカラー型宣言"php.net2015-03-16 2015年3月17日取得
  67. ^ a b c d e fg ブレント 「PHP8の新機能」スティッチャー2020年9月22日取得
  68. ^ 「PHP8がリリースされました」PHP 2020年11月27日取得
  69. ^ a b "PHP:rfc:jit"wiki.php.net 2019年4月5日取得
  70. ^ ブレント。「PHP8:実際のWebアプリケーションでのJITパフォーマンス」Stitcher.io 2020年10月4日取得
  71. ^ Rethams、Derick。「PHP8:JITの概要」
  72. ^ a b ポポフ、ニキータ。「」「PHP8.0の新機能」Nikita Popov "。PHPfwdays。2021-12-11のオリジナルからアーカイブ。 2020年10月4日取得
  73. ^ ダニエレ、カルロ(2020年5月25日)。「PHP8の新機能(機能、改善点、およびJITコンパイラー)」キンスタ2020年12月24日取得
  74. ^ レドモンド、ポール。「一致式がPHP8に登場します」Laravelニュース2020年10月4日取得
  75. ^ 「PHP8.0:式の一致」PHPウォッチ2020年10月4日取得
  76. ^ バーンズ、エリック。「PHP8がリリースされました!」Laravelニュース2020年12月24日取得
  77. ^ a b "PHP RFC:式をスローする"wiki.php.net 2020年8月14日取得
  78. ^ a b "PHP RFC:Nullsafe演算子"wiki.php.net 2020年8月14日取得
  79. ^ a b "PHP:rfc:weakrefs"wiki.php.net 2019年4月5日取得
  80. ^ 商人、アミット(2020年6月13日)。「これらの新しい文字列関数はPHP8で提供されます」アミット商人2020年10月4日取得
  81. ^ ポポフ、ニキータ。「参加の呼びかけ:内部関数の引数と戻り値の型に注釈を付ける」外観2020年11月19日取得
  82. ^ 「PHP:PHP8.1.0リリースのお知らせ」www.php.net 2022-01-08を取得
  83. ^ 「素晴らしい新しいPHP8.1機能:列挙型、読み取り専用など(2021)」RJS2021-12-21 2022-01-08を取得
  84. ^ a b c d e f g h i j k l "サポートされていないブランチ"php.net 2019年7月31日取得
  85. ^ 「PHP4.0.0がリリースされました」2020年10月25日取得
  86. ^ a b c d "PHP:PHP 4ChangeLog"PHPグループ。2008-01-03 2008年2月22日取得
  87. ^ 「PHP4.1.0リリースのお知らせ」2020年10月25日取得
  88. ^ 「PHP4.2.0リリースのお知らせ」2020年10月25日取得
  89. ^ 「PHP4.3.0リリースのお知らせ」2020年10月25日取得
  90. ^ 「コマンドラインからのPHPの使用」PHPマニュアルPHPグループ2009年9月11日取得
  91. ^ 「PHP4.4.0リリースのお知らせ」2020年10月25日取得
  92. ^ 「PHP4.4.0リリースのお知らせ」PHPマニュアルPHPグループ2013年11月24日取得
  93. ^ 「PHP5.0.0がリリースされました!」2020年10月25日取得
  94. ^ a b c "PHP:PHP 5ChangeLog"PHPグループ。2007-11-08 2008年2月22日取得
  95. ^ 「PHP5.1.0リリースのお知らせ」2020年10月25日取得
  96. ^ 「PHPマニュアル:PDO」PHPグループ。2011-11-15 2011年11月15日取得
  97. ^ 「PHP5.2.0リリースのお知らせ」2020年10月25日取得
  98. ^ 「PHP5.3.0リリースのお知らせ」2020年10月25日取得
  99. ^ 「PHP5.4.0リリースのお知らせ」2020年10月25日取得
  100. ^ 「ビルトインWebサーバー」2012年3月26日取得
  101. ^ 「PHP5.5.0リリースのお知らせ」2020年10月25日取得
  102. ^ a b cd 「 サポート されているバージョン」php.net 2017年12月13日取得
  103. ^ 「PHP5.5.0の変更」php.net 2015年3月3日取得
  104. ^ 「PHP5.6.0リリースのお知らせ」2020年10月25日取得
  105. ^ 「PHP5.5.xからPHP5.6.xへの移行」php.net 2014年3月24日取得
  106. ^ 「PHP6のリセット」少なくとも2008年以来、PHP 6をカバーすることを目的とした本が棚にあります。しかし、2010年3月には、PHP 6のリリースはリリースされていません。実際、リリースに近づいていません。最近の出来事は、PHP 6が2011年までにリリースされないことを示唆しています。実際、リリースされたとしても。
  107. ^ 「PHP7は全速力で前進します」2014-10-31。PHPの最近のバージョンは5.xリリースシリーズの一部ですが、PHP 6はありません。「数年前に6の計画があったため、[バージョン] 6をスキップしますが、それらの計画は私たちが今していることとは非常に異なっている」と語った。バージョン7に正しく移行することで、混乱を避けることができます。
  108. ^ 「ニュースアーカイブ– 2018:PHP7.2.9がリリースされました」php.net2018-08-16 2018年8月16日取得
  109. ^ "PHP:rfc:size_t_and_int64_next"php.net 2014年12月16日取得
  110. ^ 「PHP:rfc:abstract_syntax_tree」php.net 2014年12月16日取得
  111. ^ 「PHP:rfc:closure_apply」php.net 2014年12月16日取得
  112. ^ 「PHP:rfc:integer_semantics」php.net 2014年12月16日取得
  113. ^ 「PHP:rfc:isset_ternary」php.net 2014年12月16日取得
  114. ^ 「RFC:Unicodeコードポイントエスケープ構文」2014-11-24 2014年12月19日取得
  115. ^ 「結合された比較(宇宙船)演算子」php.net 2015年5月21日取得
  116. ^ 「PHPRFC:ジェネレーター委任」php.net 2015年5月21日取得
  117. ^ 「PHPRFC:匿名クラス」php.net 2015年5月21日取得
  118. ^ 「PHPRFC:Easy User-landCSPRNG」php.net 2015年5月21日取得
  119. ^ 「PHPRFC:グループ使用宣言」php.net 2015年5月21日取得
  120. ^ "PHP:rfc:void_return_type"php.net2015-11-09 2015年11月14日取得
  121. ^ 「PHP:rfc:class_constant_visibility」php.net2015-10-27 2015年12月8日取得
  122. ^ "PHP:rfc:object-typehint"wiki.php.net
  123. ^ 「PHP:rfc:libsodium」wiki.php.net
  124. ^ 「PHP:rfc:allow-abstract-function-override」wiki.php.net
  125. ^ 「PHP:rfc:parameter-no-type-variance」wiki.php.net
  126. ^ "PHP:todo:php73"wiki.php.net
  127. ^ 「PHP:rfc:flexible_heredoc_nowdoc_syntaxes」wiki.php.net
  128. ^ 「PHP:rfc:list_reference_assignment」wiki.php.net
  129. ^ 「PHP:rfc:pcre2-migration」wiki.php.net
  130. ^ 「PHP:hrtime –手動」php.net
  131. ^ 「PHP7.4.0がリリースされました!」php.net 2019-11-28を取得
  132. ^ "PHP:rfc:typed_properties_v2"wiki.php.net 2019年4月4日取得
  133. ^ 「PHP:rfc:preload」wiki.php.net 2019年4月4日取得
  134. ^ "PHP:rfc:null_coalesce_equal_operator"wiki.php.net 2019年4月4日取得
  135. ^ 「PHP:rfc:improve-openssl-random-pseudo-bytes」wiki.php.net 2019年4月4日取得
  136. ^ 「PHP:rfc:ffi」wiki.php.net 2019年4月5日取得
  137. ^ "PHP:rfc:permanent_hash_ext"wiki.php.net 2019年4月5日取得
  138. ^ 「PHP:rfc:password_registry」wiki.php.net 2019年4月5日取得
  139. ^ 「PHP:rfc:mb_str_split」wiki.php.net 2019年4月5日取得
  140. ^ 「PHP:rfc:reference_reflection」wiki.php.net 2019年4月5日取得
  141. ^ "PHP:rfc:deprecate-and-remove-ext-wddx"wiki.php.net 2019年4月5日取得
  142. ^ 「PHP:rfc:custom_object_serialization」wiki.php.net 2019年4月5日取得
  143. ^ "PHP:todo:php80"wiki.php.net 2020年6月16日取得
  144. ^ "PHP:rfc:negative_array_index"wiki.php.net 2019年4月5日取得
  145. ^ 「PHPRFC:抽象特性メソッドの検証」wiki.php.net 2020年8月14日取得
  146. ^ 「PHPRFC:Saner文字列と数値の比較」wiki.php.net 2020年8月14日取得
  147. ^ 「PHPRFC:Saner数値文字列」wiki.php.net 2020年8月14日取得
  148. ^ 「PHPRFC:算術/ビット演算子のより厳密な型チェック」wiki.php.net 2020年8月14日取得
  149. ^ 「PHPRFC:エンジン警告の再分類」wiki.php.net 2020年8月14日取得
  150. ^ 「PHP:rfc:consistent_type_errors」wiki.php.net 2019年4月5日取得
  151. ^ 「PHP:rfc:lsp_errors」wiki.php.net 2019年5月26日取得
  152. ^ 「PHPRFC:ロケールに依存しないfloatからstringへのキャスト」wiki.php.net 2020年8月14日取得
  153. ^ 「PHPRFC:変数構文の微調整」wiki.php.net 2020年8月14日取得
  154. ^ 「PHPRFC:属性V2」wiki.php.net 2020年8月14日取得
  155. ^ 「PHPRFC:属性の修正」wiki.php.net 2020年8月14日取得
  156. ^ 「PHPRFC:より短い属性構文」wiki.php.net 2020年6月20日取得
  157. ^ 「PHPRFC:より短い属性構文の変更」wiki.php.net 2020年8月14日取得
  158. ^ 「PHPRFC:名前付き引数」wiki.php.net 2020年8月14日取得
  159. ^ 「PHPRFC:式v2に一致」wiki.php.net 2020年8月14日取得
  160. ^ 「PHPRFC:コンストラクタプロパティプロモーション」wiki.php.net 2020年8月14日取得
  161. ^ 「PHPRFC:ユニオンタイプ2.0」wiki.php.net 2020年8月14日取得
  162. ^ 「PHPRFC:混合型v2」wiki.php.net 2020年8月14日取得
  163. ^ 「PHPRFC:静的戻り型」wiki.php.net 2020年8月14日取得
  164. ^ 「PHPRFC:非キャプチャキャッチ」wiki.php.net 2020年8月14日取得
  165. ^ アンドレ、タイソン。「PHPRFC:常に利用可能なJSON拡張機能」PHP 2020年10月25日取得
  166. ^ 「PHPRFC:明示的な8進整数リテラル表記」wiki.php.net 2020年11月25日取得
  167. ^ 「PHPRFC:列挙型」wiki.php.net 2021-03-25を取得
  168. ^ "PHP:rfc:readonly_properties_v2"wiki.php.net 2021-11-26を取得しました。
  169. ^ 「PHP:rfc:first_class_callable_syntax」wiki.php.net 2021-11-26を取得しました。
  170. ^ 「PHP:rfc:new_in_initializers」wiki.php.net 2021-11-26を取得しました。
  171. ^ 「PHP:rfc:pure-intersection-types」wiki.php.net 2021-11-26を取得しました。
  172. ^ "PHP:rfc:noreturn_type"wiki.php.net 2021-11-26を取得しました。
  173. ^ "PHP:rfc:final_class_const"wiki.php.net 2021-11-26を取得しました。
  174. ^ 「PHP:rfc:fibers」wiki.php.net 2021-11-26を取得しました。
  175. ^ 「PHP:ElePHPant」2014年10月4日2014年10月4日取得
  176. ^ 「リダイレクト…」wwphp-fb.github.io
  177. ^ 「PHPマスコットの誕生-elePHPantの作成者であるVincentPontierが実話を明らかにします!」7php.com2014-01-06。
  178. ^ 「PHP:ElePHPant」www.php.net
  179. ^ 「Elephpantsのフィールドガイド」afieldguidetoelephpants.net
  180. ^ 「タグ–手動」php.net 2014年2月17日取得
  181. ^ a b "PHP:rfc:shortags"php.net2008-04-03 2014年5月8日取得
  182. ^ 「PHP:基本構文」PHPグループ2008年2月22日取得
  183. ^ 「基本的なコーディング標準」PHPフレームワーク相互運用性グループ2016年1月3日取得
  184. ^ 「エコー–手動」php.net 2014年2月17日取得
  185. ^ 「コアphp.iniディレクティブの説明–マニュアル」php.net2002-03-17 2014年2月17日取得
  186. ^ 「最初のPHP対応ページ」PHPグループ2008年2月25日取得
  187. ^ ブレイ、ティム; etal。(2008年11月26日)。「処理命令」Extensible Markup Language(XML)1.0(第5版)W3C 2009年6月18日取得
  188. ^ 「変数」PHPグループ2008年3月16日取得
  189. ^ 「命令の分離」PHPグループ2008年3月16日取得
  190. ^ 「コメント」PHPグループ2008年3月16日取得
  191. ^ 「PHPの整数、はさみで実行、および移植性」MySQLパフォーマンスブログ。2007年3月27日2007年3月28日取得
  192. ^ a b c de 「 タイプ PHPグループ2008年3月16日取得
  193. ^ 「文字列」PHPグループ2008年3月21日取得
  194. ^ 「SPL–StandardPHPLibrary」PHP.net2009年3月16日2009年3月16日取得
  195. ^ a b 「ユーザー定義関数(PHPマニュアル)」php.net2014-07-04 2014年7月7日取得
  196. ^ a b 「変数関数(PHPマニュアル)」php.net2014-07-04 2014年7月7日取得
  197. ^ "create_function()(PHPマニュアル)"php.net2014-07-04 2014年7月7日取得
  198. ^ 「無名関数(PHPマニュアル)」php.net2014-07-04 2014年7月7日取得
  199. ^ 「矢印関数(PHPマニュアル)」php.net 2021年1月25日取得
  200. ^ クリスティアンザイラー; ドミトリー・ストゴフ(2008-07-01)。"Request for Comments:Lambda関数とクロージャ"php.net 2014年7月7日取得
  201. ^ a b "PHP5オブジェクト参照"mjtsai.com 2008年3月16日取得
  202. ^ 「クラスとオブジェクト(PHP 5)」PHPグループ2008年3月16日取得
  203. ^ 「オブジェクトのクローン作成」PHPグループ2008年3月16日取得
  204. ^ 「可視性(PHPマニュアル)」theserverpages.com2005-05-19 2010年8月26日取得
  205. ^ 「コンピュータ言語はどのように機能しますか?」2009年11月4日取得
  206. ^ ギルモア、W。ジェイソン(2006-01-23)。PHPとMySQL5の開始:初心者からプロフェッショナルまで押してください。p。 43ISBN 1590595521
  207. ^ 「[VOTE] Zend Optimizer +をPHPディストリビューションに統合する」news.php.net 2013年3月8日取得
  208. ^ 「代替PHPキャッシュ」PHP.net 2013年9月21日取得
  209. ^ 「私たちは98.5%(および16%)«HipHop仮想マシンです」hhvm.com2013年12月2014年2月23日取得
  210. ^ 「決定的なPHP5.6、7.0、7.1、7.2および7.3ベンチマーク(2019)」2019-01-14 2019年4月19日取得
  211. ^ オキアミ、ポール(2017-09-20)。「PHPを忘れてください!FacebookのHHVMエンジンは代わりにHackに切り替わります」InfoWorld 2019-02-06を取得しました。
  212. ^ 「HPHPcサポートを削除するGitHubに関する発表」GitHub2013年5月24日取得
  213. ^ 「PHPライセンス、バージョン3.01」2010年5月20日取得
  214. ^ 「GPL-互換性のない、自由ソフトウェアライセンス」それらに関するさまざまなライセンスとコメントフリーソフトウェアファウンデーション2011年1月3日取得
  215. ^ 「PHP:関数とメソッドのリスト–マニュアル」PHPグループ2015年1月14日取得
  216. ^ 「はじめに–マニュアル」php.net2013-06-07 2013年6月13日取得
  217. ^ Darryl Patterson(2004年8月5日)。「PHPDataObjectsを使用したビジネスロジックの簡素化— O'ReillyMedia」ibm.com 2014年12月16日取得
  218. ^ 「IBM—アメリカ合衆国」2014年12月16日取得
  219. ^ 「5つの一般的なPHPデータベースの問題」ibm.com2006-08-01 2013年6月13日取得
  220. ^ 「IBMRedbooks—IBMデータサーバー用のPHPアプリケーションの開発」redbooks.ibm.com 2014年12月16日取得
  221. ^ 「php [architect]マガジン-PHPプログラマーのためのジャーナル」www.phparch.com
  222. ^ オキアミ、ポール(2005年10月19日)。「PHPが企業に追いつき、Javaと争う」InfoWorld2014年7月13日にオリジナルからアーカイブされました。
  223. ^ 「相互参照:/ PHP_5_4 / ext / standard /」php.net2012年3月16日にオリジナルからアーカイブされました2014年12月16日取得
  224. ^ 「カスタムPHP拡張機能の開発」devnewz.com2002-09-09。2008年2月18日にオリジナルからアーカイブされました2008年2月25日取得
  225. ^ 「なぜゼファー?」zephir-lang.com2015-10-20 2015年12月14日取得
  226. ^ 「PHPクレジット」2018年12月16日取得
  227. ^ 「PHPトレーニングとPHP認定を通じてPHPを学ぶ」www.zend.com 2020年11月16日取得
  228. ^ ab 「一般的なインストールに関する考慮事項php.net 2013年9月22日取得
  229. ^ 「ニュースアーカイブ:PHP 5.3.3がリリースされました!」php.net2010-07-22。
  230. ^ 「FastCGIプロセスマネージャー(FPM)」php.net 2013年9月22日取得
  231. ^ 「コマンドラインの使用法:はじめに」php.net 2013年9月22日取得
  232. ^ 「コマンドラインの使用法:他のSAPIとの違い」php.net 2013年9月22日取得
  233. ^ ab 「一般的なインストールに関する考慮事項php.net 2013年9月22日取得
  234. ^ 「PHP:MicrosoftWindows上のApache2.x」php.net2013年9月26日にオリジナルからアーカイブされました2013年9月22日取得
  235. ^ 「コマンドラインの使用法:はじめに」php.net 2013年9月22日取得
  236. ^