PHP internals 参考記事まとめ

PHP7が今年の秋リリースということで、色々とPHP7の新機能についてちょこちょこ調べているのですが、パフォーマンスの面で非常に向上しているようで楽しみにしています。

 php7のスケジュール

https://wiki.php.net/rfc/php7timeline

 

その他、新機能もりもりのようですが、このあたりは改めて記事に書くことにします。

今回はPHPの内部構造、PHPコアについて。

 

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の配列がどのように実装されているか等、分かりやすく解説されています。

 

www.slideshare.net

 PHPをカスタマイズするという視点で内部構造を解説されています。

 

QIQの設計と実装 - 讃容日記

PHPの実行の流れや、どのようにしてPHPを拡張しているかが分かります。

 

PHP7はなぜ速いのか(zval編) - hnwの日記

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して確認することができます。

 

PHP: internals

wiki.php.net内のPHPコアについての解説記事。まだ記述されていないページ等もあるが参考にはなります。

 

PHPソースコードリーディング入門(とっかかり編) - id:anatooのブログ

PHPソースコードについての解説。これからソースコードを読む人にはありがたいです。筆者さんのブログではPHPコアについての記事が他にもありますのでそちらも読んでみてください。

 

最終的には、なんといってもソースコードが最強の1次情報です。

気になる部分は必ずソースコードを読みましょう。

 

http://lxr.php.net/

PHPソースコードを検索するためのサイトです。

標準関数がどのように実装されているのかや、マクロ定義などを追っていくのに便利です。例えばvar_dump関数の定義を調べたいならfull searchに"PHP_FUNCTION var_dump"と入力すると(「"」も含めて検索します)定義のリンクが得られます。

 

 

github.com

github上のphpリポジトリです。

PRでのコミッターさん同士のやり取りなんかも貴重な情報源です。

 

やはり見るだけでは処理の流れのイメージがつかないので、デバッガを実行できるようにビルドして実際に動かしながらデバッガで動きを見るのがいいです。

デバッガを動かして動きを見る方法は下記のサイトが参考になります。

GDBデバッガを利用してPHP内部の動きを知る - PHPソースコードリーディング入門その2 - id:anatooのブログ

 

以上、PHP internalsに関する参考記事でした。他にも有用な記事ありましたら是非教えてください!