PHP の zval を読む #1
Posted at 08 Jan 2012
今回の記事では GitHub における php/php-src の commit c5d10ddda394b573dfaea1380285e1dd5f3c0d50 を前提としている.
zval というのは PHP のソースコード中で使用される構造体で, PHP 中で使われる値を持つ汎用的な構造体のようだ.
PHP のソースコード中には この zval が多数登場する.
./Zend/zend.h で以下のように定義されている.
このように, zval は 4 つのメンバから構成されている.
名前から以下のようなものだと想像される. (あくまで想像である点に注意)
- value: 値それ自体
- refcount__gc: GC に使うリファレンスカウントだろうか
- type: PHP における型
- is_ref__gc: 参照であるかどうか, というフラグだろうか
次に, type メンバの型である zend_uchar について調べてみる.
git grep などで探してみると, ./Zend/zend_types.h に見つかった.
何のことは無い, ただの unsigned char だった.
その他にもいくつか似たようなものがあり, それぞれそれっぽい型になっているが, zend_bool だけは unsigned char となっている.
次回はもうちょっと PHP のデータ型がどのようになっているか調べよう.