PHP(Hypertext Preprocessor)は、サーバーサイドスクリプト言語です。主にWeb開発に使用され、1995年にラスマス・ラードルフによって初めてリリースされました。以来、PHPは数多くのバージョンアップを経て、それぞれに大幅な改良と変更が加えられてきました。ここでは、PHPの誕生から、2021年9月時点での最新バージョンであるPHP 8までの進化を見ていきましょう。
PHPのバージョンと主な変更点
PHP/FI(個人ホームページ/フォームインタープリタ)1.0(1995年リリース)
PHPの最初のバージョン(当時はPHP/FIと呼ばれていた)は、ラスマス・ラードルフによって開発されました。当時、PHPはラードルフが自身の履歴書を管理したり、特定のデータを収集したりするために使用した、シンプルなCGI Perlスクリプトのセットでした。ラードルフがこれらのスクリプトをC言語と組み合わせ、PHP/FIを形成するまで、PHPは他の人が利用できる製品にはなりませんでした。
PHP/FI 2.0(1997年リリース)
PHP/FIバージョン2では、PHPの将来的な発展の基礎となる多くの機能が導入されました。これらの機能には、フォームやクッキーのサポート、そしてPHPコードをHTMLに直接埋め込む機能などが含まれます。
PHP 3(1998年リリース)
Andi GutmansとZeev Suraskiによって開発されたPHP 3は、言語の全面的な見直しを行い、今日私たちが知っている構文規則のほとんどを確立しました。オブジェクトを初めてサポートし、真に完全なプログラミング言語らしい外観を備えた最初のバージョンでした。
PHP 4(2000年リリース)
PHPバージョン4では、PHPコードを解釈するソフトウェアであるZendエンジンが導入されました。これにより、パフォーマンスが向上し、オブジェクト指向プログラミングのサポートも強化されました。また、セッションの永続化や出力バッファリングといった機能も搭載されました。
PHP5
PHP 5では、抽象クラス、インターフェース、オブジェクトクローン、例外処理などが追加され、オブジェクト指向プログラミングが大幅に改善されました。また、XMLのサポートが強化され、SQLiteのサポートも導入されました。
PHP 5.0(2004年7月リリース)
- オブジェクト指向プログラミングの改善 アクセス修飾子、インターフェース、クローニング、例外処理を含む完全なオブジェクトモデルを導入しました。
- XML処理の改善 XMLの取り扱いを容易にするため、SimpleXML拡張機能を追加しました。
- SQLite: 軽量なSQLデータベースエンジンであるSQLiteが組み込まれました PHPではデフォルトで有効です。
PHP 5.1(2005年11月リリース)
- PDO(PHPデータオブジェクト)のサポート: PHPでデータベースにアクセスするためのインターフェースを提供します。
- パフォーマンスの向上 参照サイクルを解消するためのガベージコレクターの追加が含まれます。
PHP 5.2(2006年11月リリース)
- filter_list() の紹介 安全な方法でデータの検証とフィルタリングを支援します。
- パフォーマンスと安定性の向上 互換性とパフォーマンスが向上したPCREライブラリのアップデートが含まれています。
PHP 5.3(2009年6月リリース)
- 名前空間 : それによって、コードをパッケージ内でより適切に整理できるようになります。
- 遅延静的バインディング PHPにおけるコード継承を改善します。
- クロージャ(匿名関数) 関数は、特定の名前を指定せずに作成できるようになりました。
- 例外処理の改善 複数の例外をキャッチする可能性が導入されました。
- 括弧を使わずに、入れ子になった三項演算子をサポートします。
PHP 5.4(2012年3月リリース)
- 特性 : 単一祖先プログラミング言語におけるコードの再利用を可能にする。これは一種の多重継承である。
- 短い配列構文 : array() 関数を使用する代わりに、角括弧 [] を使用して配列を宣言できるようになりました。
- メモリ管理の改善 メモリ使用量全体を削減します。
PHP 5.5(2013年6月リリース)
- 発電機 イテレータインターフェースを実装する必要なく、簡単にイテレータを作成できます。
- 最後にキーワード 例外がスローされたかどうかに関わらず、コードの一部が必ず実行されるようにするのに役立ちます。
- foreachループにおけるリストのサポート。
PHP 5.6(2014年8月リリース)
- 議論の分析 : ... を使用して、配列または Traversable オブジェクトから引数を展開できます。
- 関数と定数を使用する : 関数と定数を名前空間にインポートします。
- GMPの改善 : 整数または文字列を受け入れる関数で、GMP 数値を使用できるようにします。
- セキュリティの改善 公開鍵署名証明書のサポートが追加されました。
PHP 7(2015年リリース)
PHP 7では、Just In Time (JIT) 実行エンジンの導入により、パフォーマンスが飛躍的に向上しました。その他の機能としては、戻り値の型、スカラー型の宣言、null マージ演算子、define() を使用した定数配列の定義などが挙げられます。
PHP 7.0(2015年12月リリース)
- パフォーマンスの向上 新しいPHPNGエンジン(Zend Engine 3)は、パフォーマンスを向上させ、メモリ使用量を削減し、エラー処理を容易にします。
- 戻り値の型宣言 この機能を使用すると、関数が返す値の型を指定できます。
- スカラー型宣言 : 関数のパラメータの型 (int、float、string、bool) を強制的に指定できます。
- ヌル融合演算子(??) この演算子を使用すると、null値のチェックが簡単になります。
- 宇宙船操縦士(<=>) 2つの式を比較しやすくするために導入されました。
PHP 7.1(2016年12月リリース)
- null許容型 関数の戻り値が特定の型またはnullであることを示すことは許可されています。
- 関数は無効です : void型は、何も返さない関数に導入されます。
- クラス定数の可視性 クラス定数をpublic、private、またはprotectedとして定義できるようになりました。
- イテラブル擬似型 : 関数のパラメータと戻り値の型には、反復可能な型を入力してください。
PHP 7.2(2017年11月リリース)
- リブナトリウム : 最新かつ安全な暗号化のためのこのライブラリが、デフォルトで含まれるようになりました。
- タイプの強化 「オブジェクト」型を追加し、パラメータ型と戻り値型の宣言で抽象型を使用できるようにしました。
PHP 7.3(2018年12月リリース)
- 関数呼び出しの末尾のカンマ 関数呼び出しでは末尾のカンマを使用できます。
- JSONコードの速度改善 json_encode() 関数と json_decode() 関数のパフォーマンスが向上しました。
- GCの改善 ガベージコレクターの改良により、メモリ使用量が削減されます。
PHP 7.4(2019年11月リリース)
- 矢印関数 この機能により、匿名関数をより簡潔に作成できます。
- 型付きプロパティ : クラスプロパティに宣言された型を指定できるようになりました。
- 配列内部の展開 この機能を使うと、配列の中にある配列を展開できます。
- 弱い参考文献 オブジェクトへの参照を保持しつつ、ガベージコレクタによるオブジェクトの破棄を妨げないようにします。
PHP 8(2020年リリース)
PHPバージョン8では、パフォーマンスをさらに向上させるJust-In-Time(JIT)コンパイルなど、数々の魅力的な新機能が導入されました。その他にも、共用体データ型、マッチ式、null安全演算子、名前付き引数、属性など、多くの機能が追加されています。
さて、バージョン6はどこにあるのでしょうか?
PHP 6 版は確かにプロジェクトとして存在していましたが、 公式にはリリースされなかった PHP 6の主な目的は、世界中のあらゆる言語でのテキスト処理を可能にする標準規格であるUnicodeをネイティブにサポートすることでした。
しかし、開発者たちは多くの問題に直面した。 開発中の問題点 PHPコアに完全なUnicodeサポートを実装することは、予想以上に困難であることが判明しました。また、Unicode対応のPHP 6プレビュー版のパフォーマンスは著しく低下しました。
こうした困難と開発の遅延により、PHP 6プロジェクトは最終的に中止されました。開発者たちは、失敗に終わったPHP 6プロジェクトとの混同を避けるため、次のメジャーバージョンのPHPの命名に「6」を飛ばすことにしました。そのため、PHP 5.6の次のメジャーバージョンはPHP 7.0となりました。
PHP 7はPHP 6で計画されていた多くの機能を組み込んだものの、言語コアにネイティブなUnicodeサポートは含めなかった。その代わりに、PHP 7はパフォーマンスの向上と新機能の追加に重点を置いた。
パフォーマンスについて話しましょう。アップグレードする価値はあるのでしょうか?
プログラミング言語の進化は、新たな機能をもたらしただけでなく、各バージョンごとにパフォーマンスの向上にも特に重点が置かれてきた。
- PHP/FI 2.0 - 低 パフォーマンスは最適化されておらず、主な焦点はフォーム機能とデータベースとの連携に置かれていた。
- PHP 3 - PHP/FI 2.0 からの改善。PHP エンジンの書き換えにより、パフォーマンスと効率が向上しました。
- PHP 4 PHP 3 から改善されました。Zend エンジンの導入により、パフォーマンスがさらに向上しました。
- PHP 5.0 PHP 4とほぼ同じ。オブジェクト指向プログラミングとXMLサポートにおいて大幅な改善が加えられたものの、パフォーマンスはPHP 4とほぼ同等だった。
- PHP 5.1 - 5.6 - マイナーリリースごとに改善されており、特にパフォーマンスの最適化とガベージコレクションの改善が顕著です。
- PHP 7.0 - Zend Engine 3の導入により、PHP 5.Xに比べて大幅に性能が向上しました。多くのアプリケーションにおいて、PHP 7.0のパフォーマンスはPHP 5.6の2倍、あるいは3倍になる可能性があります。
- PHP 7.1 - 7.4 各マイナーバージョンではパフォーマンスの改善が加えられたが、PHP 5.6からPHP 7.0への飛躍ほど劇的なものではなかった。
- PHP 8.0 - PHP 7.4 から改善されています。ジャストインタイム (JIT) コンパイルの追加により、特定のケースではパフォーマンスが向上する可能性がありますが、一般的な Web アプリケーションではその改善はそれほど顕著ではないかもしれません。
セキュリティについてはどうですか?何か教えていただけますか?
PHP/FI 2.0 - PHP 3
- これらの初期バージョンでは、セキュリティはそれほど重視されておらず、多くのセキュリティ機能は含まれていませんでした。
PHP4
- PHP 4では、一部の攻撃を防ぐことを目的としてsafe_modeが導入されましたが、最終的には効果がないと判断され、PHP 5.4で非推奨となり削除されました。
PHP5
PHP 5では、いくつかのセキュリティ改善が導入されました。
- マジッククォート: SQLインジェクション攻撃を防ぐために導入されましたが、動作が不安定であると批判され、最終的にPHP 5.3でデフォルトで無効化され、PHP 5.4で削除されました。
- エラー処理の改善:PHP 5では例外処理が導入され、エラー処理が改善され、機密情報の漏洩を防ぐのに役立ちます。
- PDO(PHPデータオブジェクト):PHP 5.1で導入されたPDOは、準備済みクエリを含むデータベースにアクセスするためのインターフェースを提供し、SQLインジェクション攻撃の防止に役立ちます。
PHP 5.2
- 入力フィルタ:PHP 5.2では、入力データの検証とフィルタリングを安全かつ一貫した方法で行えるフィルタ拡張機能が導入されました。
PHP 5.3
- PHAR(PHPアーカイブ):PHP 5.3では、PHPアプリケーション全体を単一のアーカイブにパッケージ化する方法としてPHARがサポートされました。これはセキュリティ強化そのものではありませんが、PHARにはデジタル署名の検証機能など、攻撃を防ぐためのいくつかのセキュリティ対策が含まれています。
PHP 5.6
- SSL/TLSセキュリティの改善:PHP 5.6では、公開鍵署名証明書のサポートと、デフォルトのSSL/TLS設定の改善が導入されました。
PHP 7
PHP 7では、いくつかの古くて潜在的にセキュリティ上の問題がある関数と機能が無効化または削除されました。
- crypt() や hash() など、安全性の低いハッシュ関数をいくつか削除しました。
- オブジェクトインジェクションの脆弱性を防ぐため、自動逆シリアル化を無効にしました。
- 悪用される可能性のある型エラーを防止するために、型宣言と戻り値型宣言を導入しました。
PHP 7.2
- パスワードセキュリティの強化:PHP 7.2では、より安全なパスワードハッシュアルゴリズムであるArgon2をサポートするpassword_hash()関数が導入されました。
PHP 8
PHP 8では多くの新しいセキュリティ機能は導入されなかったが、PHP 7の傾向を引き継ぎ、時代遅れで潜在的に安全でない機能を削除または無効化した。
結論
PHPの最新バージョンにアップグレードすると、多くの場合、 いくつかの利点 まず、アップデートには多くの場合以下の内容が含まれます。 パフォーマンスの向上 第二に、新しいバージョンには多くの場合、 新機能 コードをより効率的にし、記述や保守を容易にすることができます。 第三に、PHP の新しいバージョンには、多くの場合、セキュリティ強化機能が含まれており、 アプリケーションを保護する 攻撃や脆弱性に対する対策。
しかし、PHP の新しいバージョンにアップグレードすると、 課題 既存のコードは、新機能をサポートするため、または無効化または削除された機能を回避するために、修正またはリファクタリングが必要になる場合があります。いずれの場合も、PHP の更新は、システムを実行する上で不可欠な部分です。 安全で高性能なウェブアプリケーション .



