僕たちが幾度となくお世話になったvar_dump() ちょっとまって、この関数すごくない? var_dump()半端ないって。どんなオブジェクト入れても表示するもん。そんなんできひんやん、普通。
ということでvar_dump()のルーツ(実装)を探りにgithub/php-srcに向かった僕だった
PHPerKaigi2019 LT
https://twitter.com/MasakiKuwako https://github.com/kuwako
みんなが愛したvar_dump()の実装を探しに旅に出た1PHPerKaigi2019 ルーキーズLT@MasakiKuwako
View Slide
自己紹介Masaki KUWAKOtwitter: @MasakiKuwako / github: kuwako- PHP歴は7年くらい- 初PHPは大学4年時- 現在メルカリでカスタマーサポートツールのBackendEngineerを担当(PHP/JS/Go)- 副業でオンラインプログラミング講師- 趣味- 四川料理/ビール/テニス/サッカー
皆さん
var_dump()に
お世話になりましたよね?
というわけでgithub/php/php-srcに向かう僕だった
php-srcを読むときの事前知識- 言語はCで実装されている- 関数系はだいたい php-src/ext の下に拡張扱いで置かれている- C言語のマクロが使われており、初見だと大分わかりづらい- ソースファイル- php-src/ext/standard/php_var.h (定義)- php-src/ext/standard/var.c (実装)
var_dump()の呼び出し部分
var_dump()の呼び出し部分関数登録のマクロ
var_dump()の呼び出し部分引数取って
var_dump()の呼び出し部分引数の数だけ実行
なるほど
var_dump()の実装 (プリミティブ)
var_dump()の実装 (array)
var_dump()の実装 (array)循環参照検知
var_dump()の実装 (array)ここでキーの部分だけ表示処理して再帰でphp_var_dump()が実行されるここでキーの部分だけ表示処理して再帰でphp_var_dump()が実行される
var_dump()の実装 (array)キーのみ表示処理
var_dump()の実装 (array)キーのみ表示処理バリューはphp_va_dump()に流す
var_dump()の実装 (オブジェクト)
var_dump()の実装 (オブジェクト)ここでプロパティの部分だけ表示処理して再帰でphp_var_dump()が実行される
まとめ
まとめ- 意外と思ったとおりのソースだった
まとめ- 意外と思ったとおりのソースだった- オブジェクトとかが大きすぎたときに … に略してくれる気の利くアレの実装どこだ???
まとめ- 意外と思ったとおりのソースだった- オブジェクトとかが大きすぎたときに … に略してくれる気の利くアレの実装どこだ???と思ったらxdebugの機能だった
まとめ- 意外と思ったとおりのソースだった- オブジェクトとかが大きすぎたときに … に略してくれる気の利くアレの実装どこだ???と思ったらxdebugの機能だった- C読むのはなかなか疲れる
まとめ- 意外と思ったとおりのソースだった- オブジェクトとかが大きすぎたときに … に略してくれる気の利くアレの実装どこだ???と思ったらxdebugの機能だった- C読むのはなかなか疲れる- var_dump()さんいつもありがとう!!!!
Thank you for listening!!!github: kuwakotwitter: @MasakiKuwako