現在、ほとんどの PHP インストールでは依然として PHP 4.x バージョンが使用されています。実際、PHP 5.0 はしばらくリリースされており、現在 PHP 5.1.1 がリリースされたばかりです。これらの新しいバージョンにまだアップグレードしていない場合は、PHP の新しいバージョンでの変更点を確認し、最後に PHP 6 に期待される機能について説明します。
1. PHP 5.0 の変更点
新しいバージョン番号として、PHP 4 と PHP 5 の間には多くの大きな違いがあります。誇大宣伝のほとんどは、ゼロから書き直される新しいオブジェクト モデルを中心に展開しています。 PHP 5 バージョンはより完成度が高く、パフォーマンスも向上しています。 PHP 4 では、オブジェクトは実際には単なる大まかなデータ型であり、値によって参照されます。 PHP 5 では、zend.ze1_compatibility_mode を設定すると、バージョン 4 のメソッドとの互換性が確保され、同時に下位互換性が可能な限り維持されます。もちろん、PHP 5 には以下のような下位互換性のない変更もいくつかあります。
· 新しい予約キーワードのほとんどはオブジェクト モデルに関連しています (Exception、final、php_user_filter、interface、implements、extends、public) 、プライベート、プロテクト、抽象、クローン、トライ、キャッチ、スロー)。 PHP 4 で保持されていた 2 つの単語 (cfunction、old_function) は存在しなくなりました。
オブジェクトにプロパティがない場合、そのオブジェクトは空ではなくなります。
・array_merge() 関数は配列のみを受け入れるようになりました。
・クラスは使用前に宣言できます(特定の状況に応じて)。
·get_class()、get_parent_class()、および get_class_methods() は、以前の結果はすべて小文字でしたが、大文字と小文字を区別した結果を返すことができるようになりました。
·strrpos() と strripos() は文字列全体を使用するようになりました。たとえば、var_dump(strrpos('ABCDEF', 'DAF')) は、PHP 4 では int(3) を返し、PHP 5 では bool(false)
を返します。 $_SERVER が存在する場合、argc と Populate が行われます。 argv - これにより、CLI バージョンが常にこのデータにアクセスできるようになります。
・無効な IP アドレスが渡された場合、ip2long() は -1 ではなく FALSE を返します。
· インクルード ファイルで定義された関数をメイン ファイルからいつでも呼び出せるようになりました。ファイルが 2 回インクルードされた場合 (関数がすでに定義されている場合)、PHP 5 は致命的なエラーも発行します。
require_once() 関数と include_once 関数は、Windows のサイズに依存しないことを考慮するようになり、関数が異なるケースのファイル名で複数回呼び出された場合でも、一度に 1 つのファイルのみを含めるようになりました。
・PHP 4 の元の警告を削除します。新しい PHP 5 では、無効な文字列オフセットが発生するとエラーがスローされます。
トークナイザー拡張機能は、アイドル状態の T_ML_COMMENT 定数を定義しなくなりました。
これらの多くの互換性のない変更は、実際には大きな変更ではないことに注意してください。元のコードを PHP 5 に移植したい場合は、スクリプトに最小限の変更を加えるだけで済みます。 PHP 5 では、多くのことを実行するためのより良い方法が提供されていますが、プログラムを実行することだけが目的であれば、それほど問題はありません。 PHP 5 のその他の変更点は次のとおりです。
· コマンド ライン CLI および CGI スクリプトにわずかな変更が加えられ、新しい CLI ステータスの重要性が効果的に高まりました。
・多数の新関数の導入。その多くは配列、文字変換、ストリーム操作の処理に使用されます。
・デフォルトでは、MySQL クライアント ライブラリは PHP 5 にバンドルされていません。代わりに、SQLite 拡張機能が含まれています。これは基本的に、セットアップと管理の必要性を排除するように設計された小型データベース エンジンです。
·MySQL 4.1 以降を最大限に活用するために、Mysqli (MySQL 拡張拡張機能) が追加されました (デフォルトでは含まれていません)。
PHP 4 から PHP 5 への変更点をより包括的に理解するには、PHP Web サイトの公式アーカイブを参照してください。
2. PHP 5.1.x の変更点
この記事が書かれた時点では、PHP 5.1.1 がリリースされたばかりでした (広く議論されている 5.1.1 の直後)。 0がリリースされました)。このリリースは、PHP メーリング リストで小さな騒動を引き起こしました。バージョン 5.1.0 では、特定の重要な変更が後続のリリース候補に急遽組み込まれました。最終リリースが大きな騒動を引き起こすまで、すべては静かに見えました。ただし、pear::date の競合を防ぐために、これらの変更は 5.1.1 で元に戻されました。
・今や、電光石火のスピードで登場した PDO は、PHP の中核の一部になりました。 PHP に関連する抽象化層の知識について詳しくは、「PHP のデータベース抽象化」または PHP Web サイトの公式アーカイブを参照してください。
PDO MySQL ドライバーは、MySQL にアクセスするための推奨される方法になりました。古い mysqli および mysql 拡張機能はデフォルトでは有効になっていません。
・PHP 5.1 では、バージョン 5.0 に比べてパフォーマンスも大幅に向上しました。
前述したように、日付/時刻のサポートはバージョン 5.1.0 で書き直され、バージョン 5.1.1 で復元されました。おそらく、すぐに変更が加えられるでしょう - 慎重に計画されたものではありますが。
・PHP 5.0からPHP 5.0.4では、抽象プライベートメソッドがサポートされています。しかし、現在ではそれらはすべて中止となっています。
・クラス定数の重複宣言が禁止になりました。次のコードは 5.1 では機能せず、E_ERROR エラーがスローされます。
class anything {
const const_name = 'value';
const const_name = 'value2';
}
?>
$var1 = "value";
function return_val() {
global $var_name;
return $var_name;
}
$var2 = &return_val();
?>
このコードは以前は機能していましたが (バージョン 5.0.4 まで)、バージョン 5.1 では機能しなくなりました。 E_STRICT 例外。
おそらく 5.1.x は間もなく廃止されるでしょうが、多くの貴重な改善が導入されています。おそらく PDO の導入が最も賞賛に値します。 PHP ドキュメントの変更ログの詳細については、PHP 5.1 (およびそれ以前のバージョン) の変更点の広範なリストを参照してください。
3. PHP 6.0 で行われる変更点
PHP 6.0 は非常にエキサイティングなリリースになることが期待されています。しかし、すべては二つに分かれます。しかし、私を最もイライラさせている 3 人 (register_globals、magic_quotes_gpc、safe_mode) が辞任する可能性があるようです。 1 つ目は大きなセキュリティ ホールがあり、2 つ目は大量のデータを操作するため、環境を変更するときの悪夢です。3 つ目は名前が間違っており、人々に誤った認識を与えます。安全。 Unicode の問題に関しては、やるべきことがまだたくさんあります。予想される新しい変更は次のとおりです:
·register_globals、safe_mode、およびさまざまなマジック参照オプションが削除されます。
ereg 拡張機能は削除され、XMLReader、XMLWriter、および Fileinfo 拡張機能がカーネルに追加され、デフォルトでオンになります。
私が見つけたもう 1 つのエキサイティングな新しい変更は、デフォルトではオフになっていますが、APC (代替 PHP キャッシュ) がカーネルに追加されることです。 APC は開発者に重大なパフォーマンス上の利点をもたらします。
すべての E_STRICT メッセージは E_ALL にマージされます。これは、優れたプログラミング実践に対するもう 1 つの前向きな変更です。
・ASP スタイルタグ
・新しい 64 ビット整数を導入しました。現在の整数型は保持されます。32 ビットか 64 ビットかはプラットフォームによって異なります。
・foreachはforeach($array as $k => list($a, $b))のように多次元配列と組み合わせて使用できます。
php.ini の新しいスイッチを使用すると、Unicode セマンティクスを無効にすることができます (デフォルトではオンになっています)。
・Unicodeの文字列操作にもさまざまな改良が加えられています。
microtime() 関数は、現在のマイクロ秒値 unix_timestamp ではなく、完全な浮動小数点数を返します。これはほとんどの人にとって有益である可能性が高くなります。
· 文字列インデックスの {} アノテーションはサポートされなくなり、[] バージョンが substr() 関数と array_slice() 関数に追加されます。古い [] は多くの人から批判されましたが、私を含むほとんどの開発者は常に [] を使用してきました。
· CGI SAPI シナリオをターゲットとする場合、FastCGI は常に有効になり、無効になりません。
・古い HTTP_*_VARS グローバル変数はサポートされなくなりました。
·var には新しいエイリアス public が付けられます。 Var は PHP4 クラスでは許可されていますが、PHP 5 では警告が発生します。 PHP 6 では、var は public の単なるエイリアスになるため、警告は表示されなくなります。
·Ze1 互換モードは削除されます - このメソッドは当初、PHP 4 の動作を保持しようとしましたが、いくつかのバグがありました。
・静的構文を使用して動的関数を呼び出すことは許可されなくなりました。
さらに、まだ決定すべき問題がたくさんあります。たとえば、名前空間の方が重要かもしれませんが、基本的にはまだ合意されていません。最近の PHP 開発者カンファレンスで PHP 6 の詳細な議論を読むことができます。 PHP 6 はまだリリースされていませんが、最終リリースまでには紆余曲折があると思います。それにもかかわらず、PHP の貢献は業界で十分に認められており、その未来は明るいです。