PHPバージョン8のいくつかの改善
- 24-07-2022
- Toanngo92
- 0 Comments
PHP 8.0は、2020年11月26日にリリースされました。これらの変更により、PHPの操作が簡単になり、複雑になりません。 PHP 8.0は、PHP言語のメジャーアップデートと見なされています。これには、次のような多くの新機能と最適化があります。
- 名前付き引数
- 属性
- コンストラクタープロパティプロモーション
- 共用体タイプ
- マッチ式
- Nullsafe演算子
- 強化されたエラー処理、および型システム
- 一貫性
Mục lục
名前付き引数(名前付き引数)
この新機能では、ユーザーは必須パラメーターを指定し、オプションのパラメーターを省略するだけで済みます。引数は自己文書化されており、ソート順に依存しません。
PHP7.0と8.0の違いの例
PHP 7 | PHP 8 |
htmlspecialchars($ string、ENT_COMPATCT | ENT HTML401、'UTF-8'、false); | htmlspecialchars($ string、double encode:false); |
属性(属性)
ユーザーは、PHPドキュメントのコメントの代わりに、PHPのネイティブ構文で構造化メタデータを使用できるようになりました。
PHP 7.0 | PHP 8.0 |
クラスPostscontroller{ / ** * @Route( "api / posts / {id}")、methods = {"GET"} * / パブリック関数get($ id){ //やること } } | クラスPostsController{ #[Route( "api / posts / {id}" ,, methods:["GET"])] パブリック関数get($ id){ //やること } } |
コンストラクタープロパティの昇格(オブジェクト初期化の概要)
オブジェクトのプロパティを定義および初期化するときに、ソースコードが短縮されます。
PHP 7.0 | PHP 8.0 |
クラスポイント{ public float $ x; public float $ y; public float $ z; パブリック関数__construct( float $ x = 0.0、 float $ y = 0.0、 float $ z = 0.0 ){ $ this-> x = $ x; $ this-> y = $ y; $ this-> z = $ z; //やること } } | クラスポイント{ パブリック関数__construct( パブリックフロート$x= 0.0、 public float $ y = 0.0、 パブリックフロート$z= 0.0 ){ //やること } } |
共用体タイプ(データ型の組み合わせ)
ユーザーは、PHPドキュメントのアノテーションの代わりに、実行時に検証されたネイティブの連想型宣言を使用できます。
PHP 7 | PHP 8 |
クラス番号{ / ** @var int | float * / プライベート番号; / ** * @param float | int $ number * / パブリック関数__construct($ number){ $ this-> number = $ number; } } new Number('NaN'); //その仕事 | クラス番号{ パブリック関数__construct(private int | float $ number){ //する } } new Number('NaN'); //タイプエラー |
一致式(一致式)
PHP 8.0での式の照合は、次の機能を備えた変換に似ています。
- 一致は式です。つまり、結果を変数に格納することも、返すこともできます。
- 一致するブランチは単一行の式のみをサポートし、breakステートメントは必要ありません。 。
- 比較は厳密には比較されません。
PHP 7 | PHP 8 |
<?php スイッチ(8.0){ ケース「8.0」: $ result = '8.0'; 壊す; ケース8.0; $ result='8.0が期待されます'; 壊す; } エコー$result; // 8.0 8.0 | エコーマッチ(8.0){ '8.0' => '8.0'、 8.0 => '8.0が必要'、 }; //8.0を除く |
ヌルセーフ演算子
ユーザーは、代わりに新しいnullセーフ演算子を使用して一連の呼び出しを使用できます。
nullをチェックする条件のコードを記述します。
シーケンス内の要素の識別に失敗すると、実行全体が中止され、その後、チェーン全体がnullになります。
PHP 7 | PHP 8 |
$ country = null; if($ session!== null){ $ user = $ session-> user; if($ user!== null){ $ address = $ user-> getAddress(); } if($ address!== null){ $ country = $ address-> country; } } | $ country = $ session?-> user?-> getAddress()?-> country; |
強化されたエラー処理と型システム
さまざまなタイプのシステムで多くの変更が行われ、次のようにエラー処理が改善されました。
- 以前のバージョンよりも算術/ビット演算子の厳密な型チェック
- 抽象特性法の検証
- マジックメソッドに正しいシグネチャが追加されました。
- 警告エンジンが再分類されました
- 互換性のないメソッドは致命的なエラーを引き起こします
- プライベートメソッドによる継承
- 混合タイプ
- 静的リターンタイプ
- OpenSSL、GD、Curl、のリソースの代わりに不透明なオブジェクトを使用します
XMLライター、ソケット、およびXML拡張機能
一貫性(一貫性)
PHP 8.0には、内部関数の整合性エラーがあります。パラメータを検証できない場合、ほとんどの内部関数はエラー例外をスローします。
ジャストインタイム(JIT)コンパイラ
インタプリタまたはインタプリタ言語として、PHPはコンパイルされた場合、起動時にすぐには実行されません。リアルタイムで実行されます。以前のバージョンのPHPでは、コンパイル中にPHPコードが実行されるたびに、インタープリターは最初に解釈し、次にコンパイルし、最後にコードを実行する必要がありました。これはリクエストごとに繰り返し実行されるため、コードの実行が遅くなり、CPUリソースが浪費されます。
この問題は、PHP8.0でのJustIn Time(JIT)コンパイラの導入により修正されました。
JITコンパイラを使用すると、ユーザーはプログラムを実行する直前にマシンコードにコンパイルできます。 JITはコンパイルフェーズをスキップするため、PHPコードに柔軟性を提供し、コードの実行、メモリ使用量、およびパフォーマンスを大幅に改善します。ただし、これらの改善は数学計算または数値計算にのみ適用され、通常のPHPWebアプリケーションには適用されません。 JITは、3Dレンダリング、データ分析、人工知能などの長い実行サイクルを伴うプログラムで広く使用されています。
PHP 8.0には、2つのJITコンパイルツール、つまりトレーシングJITと関数JITが導入されています。
JITのトレースは、2つの中で最も安全です。合成ベンチマークでは、パフォーマンスが3倍向上しています。さらに、特定の長時間実行アプリケーションには2つの改善点があります。