LoginSignup
64
62

More than 3 years have passed since last update.

【PHP】Zend Engine の内部を図示した記事・資料まとめ

Last updated at Posted at 2016-11-15

はじめに

C言語も英語も中国語も読めないPHP入門者です。
@tadsan さんの PHPの実行時とコンパイル時 を読んで、PHP内部でどのように処理されているのか全く理解していないことに気づきました。
理解するにはPHP内部のコードを読むのが一番かと思いますが、まだC言語は読めないので、Google検索とGoogle画像検索とGoogle翻訳を駆使して、PHP内部を図示したものを探しました。
探すだけでも結構な時間を費やしたので、見つけた記事・資料を共有することで、同じように考えている方の参考になればと思います。
C言語や英語が読めれば有用な記事は他にもあると思いますが、ここでは図示されていることを軸に記事・資料を紹介します。
紹介とか偉そうなことを言いましたが、コメントは小並感なので無視してください。

PHPの内部構造は複雑で、内部構造の全体ではなく、一部にフォーカスして説明されている記事もあります。
ここでは、下記のように大別して紹介します。
また、PHP5とPHP7では内部構造が異なりますが、区別しておりません。

  • ZendEngine 全体
  • ZendVirtualMachine(ZendLexer、ZendParser、ZendOPcode...)
  • ZendEngineCore(ZendVariables、ZendObjects、ZendHashTables...)

ここで紹介するリンク先の筆者の方々のお陰で理解が進みました。
わかりやすい記事・資料、ありがとうございます ((_ _ (´ω` )ペコ

この他に皆様のおすすめ記事・資料があれば、教えてください。
新しく図示された記事・資料を見つけたら追記したいと思います。

余談ですが、ZendEngineについて不明な点があり、teratailで質問をしたところ、@hnw さんから回答を頂きました。
ありがとうございます ((_ _ (´ω` )ペコ
同じように疑問に思った方の参考になればと思い、追記しておきます。

ZendEngine 全体

Quick tour of PHP from inside

ここまで Zend Engine 全体を図示したものはないと思います。
Zend Engine 全体について解説されている英語の記事です。
英語読める方なら、このスライドの 筆者ブログ も参考になると思います。

001.jpg

引用元:Quick tour of PHP from inside

PHP による hello world 入門 | 東北ギーク

hello world と記述したコードがどのように実行されるのか、非常に細かく解説されている日本語の記事です。

002.jpg

引用元:PHP による hello world 入門 | 東北ギーク

PHP 5.5ネーティブキャッシュの話

リクエストからレスポンスまでの流れが非常にわかりやすい日本語の記事です。

003.jpg

引用元:PHP 5.5ネーティブキャッシュの話

Phpをいじり倒す10の方法

SAPI と ZendEngine と Extensinons について詳細に解説されている日本語の記事です。

004.jpg

引用元:Phpをいじり倒す10の方法

php and sapi and zendengine2 and...

PHP と SAPI と Zend Engine の関係についてわかりやすい日本語の記事です。

005.jpg

引用元:php and sapi and zendengine2 and...

PHP and Zend Internal I - 体系结构及生命周期

中国語ですが SAPI と PHP Core と ZendEngine の関係がわかりやすいです。

006.jpg

引用元:PHP and Zend Internal I - 体系结构及生命周期

Internal php and gdb php core

中国語ですが SAPI と PHP Core と ZendEngine と Extensions の関係がわかりやすいです。

007.jpg

引用元:Internal php and gdb php core

ZendVirtualMachine(ZendLexer、ZendParser、ZendOPcode)

Php opcodes sep2008

Lexer や Parser、オペコードに関しての詳細を解説されている英語の記事です。
私が気になるオペコード周りについて超重要なことが書いてあると思うけど... I can't read English.

008.jpg

引用元:Php opcodes sep2008

PHP AST 徹底解説

PHP7から追加されたAST(抽象構文木)について非常にわかりやすい解説されている日本語の記事です。
字句解析、構文解析、オペコードの解説もあります。

009.jpg

引用元:PHP AST 徹底解説

Zend OPcacheの速さの秘密を探る

@hnw さんのスライドですが、Lexer から Zend VM までの流れが非常にわかりやすい日本語の記事です。

010.jpg

引用元: Zend OPcacheの速さの秘密を探る

ZendEngineCore(ZendVariables、ZendObjects、ZendHashTables)

Forum PHP 2007 - Paris, France

英語の記事ですが、シンボルテーブルとZvalの関係が非常にわかりやすいです。
参照時のシンボルテーブルの動きは複雑ですが、ここを見れば理解できると思います。

011.jpg

引用元:Forum PHP 2007 - Paris, France

PHPの配列管理方法を正しく理解する-ハッシュテーブルとZval

シンボルテーブルとZval、ハッシュテーブルの関係が非常にわかりやすく解説されている日本語の記事です。

012.jpg

引用元:PHPの配列管理方法を正しく理解する-ハッシュテーブルとZval

PHPのデータ構造

シンボルテーブル、zval、ハッシュテーブルの関係が非常にわかりやすい日本語の記事です。

013.jpg

引用元:PHPのデータ構造

The secret of PHP7's Performance

英語の記事ですが、Zvalとハッシュテーブル、シンボルテーブルについて非常にわかりやすいです。
PHP5とPHP7でどのように変わったかもわかりやすく図示されています。

014.jpg

引用元:The secret of PHP7's Performance

PHP7で変わること ——言語仕様とエンジンの改善ポイント

@hnw さんのスライドですが、PHP5とPHP7でzvalがどのように変わったのか、わかりやすく解説されている日本語の記事です。

015.jpg

引用元:PHP7で変わること ——言語仕様とエンジンの改善ポイント

その他

文章やコードがメインだけど、参考になりそうな記事も載せておきます。

日本語

英語

note

note でも記事を公開してるので、興味がある方はご覧ください。

【初学者向けコードリーディング】 PHP の TODO アプリのコードを一緒に読み解こう

64
62
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
64
62