PHP internals 参考記事まとめ
PHP7が今年の秋リリースということで、色々とPHP7の新機能についてちょこちょこ調べているのですが、パフォーマンスの面で非常に向上しているようで楽しみにしています。
php7のスケジュール
https://wiki.php.net/rfc/php7timeline
その他、新機能もりもりのようですが、このあたりは改めて記事に書くことにします。
PHPの内部構造(ZendEngineとかzvalとかhashtableとかとか)についての情報って少ないですよね。特に日本語。
そんなわけで、PHPコアについて自分が調べて見つけた記事のうち、役だったものを下記にまとめます(英語多いです)。
自分もまだまだ勉強中ですが、これから勉強するという人のお役に立てば。
PHP: PHP のコア: ハッカーの手引き - Manual
公式。情報が古いですが、日本語ですし、とりあえず読みましょう。
Extension Writing Part I: Introduction to PHP and Zend - Zend Developer Zone
本家Zendによる内部構造についての解説。
Table Of Contents — PHP Internals Book
PHPのコミッターの方によるPHPの内部構造についての解説です。とても参考になりました。とりあえずこれで入門。
ircmaxell's blog: PHP's Source Code For PHP Developers - Part 1 - The Structure
Understanding PHP's internal function definitions (PHP's Source Code for PHP Developers - Part 2)
ircmaxell's blog: PHP's Source Code For PHP Developers - Part 3 - Variables
Understanding PHP's internal array implementation (PHP's Source Code for PHP Developers - Part 4)
PHP Internals Bookの筆者である、Nikita PopovさんとAnthonyFerraraさんによるPHPコアの解説記事。Inetrnals Bookと重なる部分はありますが、PHPのソースコードの追い方からzval構造体やPHPの配列がどのように実装されているか等、分かりやすく解説されています。
PHPをカスタマイズするという視点で内部構造を解説されています。
PHPの実行の流れや、どのようにしてPHPを拡張しているかが分かります。
PHP5と7のzvalについての違いについての解説記事です。
イテレータを介して見るPHPクラスの内部構造 - hnwの日記
PHPのイテレータにフォーカスを当てた記事です。普段当たり前のようにしてforeachとか書いていると思いますが、その裏側を垣間見る面白い記事です。
ちなみに筆者のhnwさんは今年のPHPカンファレンス関西の基調講演をされる方です。
http://somabo.de/talks/200903_montreal_php_extension_writing.pdf
こちらはextensionの書き方についての解説ですが、マクロの解説などはこれが一番わかり易かったです。
http://getpocket.com/redirect?url=http%3A%2F%2Fwww.slideshare.net%2Ftaketyan%2Fhash-table-hashdos
HashTable構造体についてのスライド。HashTableの理解に役立ちました。
yuya-takeyama/hashtable_dump · GitHub
上記スライド内で紹介されているhashtable_dumpというツールです。実際にHashTable構造体の中身をdumpして確認することができます。
wiki.php.net内のPHPコアについての解説記事。まだ記述されていないページ等もあるが参考にはなります。
PHPソースコードリーディング入門(とっかかり編) - id:anatooのブログ
PHPのソースコードについての解説。これからソースコードを読む人にはありがたいです。筆者さんのブログではPHPコアについての記事が他にもありますのでそちらも読んでみてください。
最終的には、なんといってもソースコードが最強の1次情報です。
気になる部分は必ずソースコードを読みましょう。
標準関数がどのように実装されているのかや、マクロ定義などを追っていくのに便利です。例えばvar_dump関数の定義を調べたいならfull searchに"PHP_FUNCTION var_dump"と入力すると(「"」も含めて検索します)定義のリンクが得られます。
PRでのコミッターさん同士のやり取りなんかも貴重な情報源です。
やはり見るだけでは処理の流れのイメージがつかないので、デバッガを実行できるようにビルドして実際に動かしながらデバッガで動きを見るのがいいです。
デバッガを動かして動きを見る方法は下記のサイトが参考になります。
GDBデバッガを利用してPHP内部の動きを知る - PHPソースコードリーディング入門その2 - id:anatooのブログ
以上、PHP internalsに関する参考記事でした。他にも有用な記事ありましたら是非教えてください!