みんなが愛したvar_dump()の実装を探しに旅に出た

753b0e81692040a514f2149d2a6fd8b0?s=47 kuwako
March 31, 2019

 みんなが愛したvar_dump()の実装を探しに旅に出た

僕たちが幾度となくお世話になったvar_dump()
ちょっとまって、この関数すごくない?
var_dump()半端ないって。どんなオブジェクト入れても表示するもん。そんなんできひんやん、普通。

ということでvar_dump()のルーツ(実装)を探りにgithub/php-srcに向かった僕だった

PHPerKaigi2019 LT

https://twitter.com/MasakiKuwako
https://github.com/kuwako

753b0e81692040a514f2149d2a6fd8b0?s=128

kuwako

March 31, 2019
Tweet

Transcript

  1. みんなが愛した var_dump()の実装を探しに 旅に出た 1 PHPerKaigi2019 ルーキーズLT @MasakiKuwako

  2. 自己紹介 Masaki KUWAKO twitter: @MasakiKuwako / github: kuwako - PHP歴は7年くらい

    - 初PHPは大学4年時 - 現在メルカリでカスタマーサポートツールのBackend Engineerを担当(PHP/JS/Go) - 副業でオンラインプログラミング講師 - 趣味 - 四川料理/ビール/テニス/サッカー
  3. 皆さん

  4. var_dump()に

  5. お世話になりましたよね?

  6. というわけで github/php/php-src に向かう僕だった

  7. php-srcを読むときの事前知識 - 言語はCで実装されている - 関数系はだいたい php-src/ext の下に拡張扱いで置かれて いる - C言語のマクロが使われており、初見だと大分わかりづらい

    - ソースファイル - php-src/ext/standard/php_var.h (定義) - php-src/ext/standard/var.c (実装)
  8. var_dump()の呼び出し部分

  9. var_dump()の呼び出し部分 関数登録のマクロ

  10. var_dump()の呼び出し部分 引数取って

  11. var_dump()の呼び出し部分 引数の数だけ実行

  12. なるほど

  13. var_dump()の実装 (プリミティブ)

  14. var_dump()の実装 (プリミティブ)

  15. var_dump()の実装 (プリミティブ)

  16. var_dump()の実装 (array)

  17. var_dump()の実装 (array) 循環参照検知

  18. var_dump()の実装 (array) ここでキーの部分だけ表示 処理して再帰でphp_var_dump()が実行される ここでキーの部分だけ表示 処理して再帰で php_var_dump()が実行される

  19. var_dump()の実装 (array)

  20. var_dump()の実装 (array) キーのみ表示処理

  21. var_dump()の実装 (array) キーのみ表示処理 バリューはphp_va_dump()に流す

  22. var_dump()の実装 (オブジェクト)

  23. var_dump()の実装 (オブジェクト) ここでプロパティの部分だけ表示 処理して再帰でphp_var_dump()が実行される

  24. まとめ

  25. まとめ - 意外と思ったとおりのソースだった

  26. まとめ - 意外と思ったとおりのソースだった - オブジェクトとかが大きすぎたときに … に略してく れる気の利くアレの実装どこだ???

  27. まとめ - 意外と思ったとおりのソースだった - オブジェクトとかが大きすぎたときに … に略してく れる気の利くアレの実装どこだ???と思ったら xdebugの機能だった

  28. まとめ - 意外と思ったとおりのソースだった - オブジェクトとかが大きすぎたときに … に略してく れる気の利くアレの実装どこだ???と思ったら xdebugの機能だった -

    C読むのはなかなか疲れる
  29. まとめ - 意外と思ったとおりのソースだった - オブジェクトとかが大きすぎたときに … に略してく れる気の利くアレの実装どこだ???と思ったら xdebugの機能だった -

    C読むのはなかなか疲れる - var_dump()さんいつもありがとう!!!!
  30. Thank you for listening!!! github: kuwako twitter: @MasakiKuwako