この記事の内容の大部分は、AST の RFC ドキュメントに基づいています: https://wiki.php.net/rfc/abstract_syntax_tree , 理解を容易にするために、ソース文書からの抜粋が紹介されています。
この記事では、抽象構文ツリーが何であるかについては説明しません。これは自分で理解する必要があります。この記事では、AST が PHP にもたらすいくつかの変更についてのみ説明します。
新しい実行プロセス
PHP7 のコアにおける重要な変更は、AST の追加です。 PHP5 では、PHP スクリプトからオペコードまでの実行プロセスは次のとおりです:
1. 字句解析: 字句スキャン分析、ソース ファイルをトークン ストリームに変換します;
2. 解析: 構文分析、Op 配列はこの段階で生成されます。
3. PHP7 では、op 配列は構文分析段階で直接生成されなくなりましたが、AST が最初に生成されるため、プロセスにはもう 1 つのステップがあります:
4. 字句解析:字句スキャン分析、ソース ファイルをトークン ストリームに変換;
5. 解析: 構文分析、トークン ストリームから抽象構文ツリーを生成;
6. コンパイル: 抽象から op 配列を生成構文ツリー。
実行時間とメモリ消費量
上記の手順から、これは前のプロセスよりも 1 つの手順が多いため、常識的には、これによりプログラムの実行時間が増加します。時間とメモリの使用量。しかし実際には、メモリ使用量は確かに増加していますが、実行時間は減少しています。
次の結果は、小規模 (約 100 行のコード)、中規模 (約 700 行)、および大規模 (約 2800 行) の 3 つのスクリプトをテストして得られます。テスト スクリプト: https ://gist.github.com/nikic/289b0c7538b46c2220bc
各ファイルを 100 回コンパイルする実行時間 (記事のテスト結果時間は 14 年であることに注意してください、PHP7 とも呼ばれます) PHP-NG ):
##php-ng |
php-ast | diff | |
---|---|---|---|
0.160s | -12.5% | MEDIUM | |
1.268s | -17.7% | LARGE | |
5.736s | -16.9% |
php-ast |
diff | ##SMALL | |
---|---|---|---|
9.5% | ##MEDIUM | 507kB | |
26.8% | 大 | 1084kB | |
71.3% | 単一コンパイルのテスト結果は、実際の使用状況を表していない可能性があります。以下は、PhpParser を使用した完全なプロジェクト テストの結果です: |
diff |
時間 | 25.5ms | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
##メモリ | 2360kB | 2482kB | |||||||||||||
## |
式 | PHP5 | PHP7 |
---|---|---|
$foo['bar']['baz'] |
#$ {$foo['bar']['baz']}
|
($$foo)['bar']['baz'] |
$foo->$bar['baz']
| ##$foo->{$bar['baz']}
#($foo->$bar)['baz'] |
| ##$foo->$ bar['baz' ]()
$foo->{$bar['baz']}() |
#($ foo->$bar )['baz']() |
##Foo::$bar['baz']() |
Foo ::{$bar['baz']}()
|
(Foo::$bar)['baz']()
|
全体的に、以前の順序は右から左でしたが、現在は左から右です。また、括弧は動作に影響を与えないという原則に従います。このような複雑な変数の書き方は、実際の開発では注意が必要です。 |
以上が新しい抽象構文ツリー (AST) によって PHP7 に加えられた変更の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 中国語版
中国語版、とても使いやすい

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

SecLists
SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

Dreamweaver Mac版
ビジュアル Web 開発ツール

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール
