Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

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

kuwako

March 31, 2019
Tweet

More Decks by kuwako

Other Decks in Programming

Transcript

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

    View Slide

  2. 自己紹介
    Masaki KUWAKO
    twitter: @MasakiKuwako / github: kuwako
    - PHP歴は7年くらい
    - 初PHPは大学4年時
    - 現在メルカリでカスタマーサポートツールのBackend
    Engineerを担当(PHP/JS/Go)
    - 副業でオンラインプログラミング講師
    - 趣味
    - 四川料理/ビール/テニス/サッカー

    View Slide

  3. 皆さん

    View Slide

  4. var_dump()に

    View Slide

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

    View Slide

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

    View Slide

  7. php-srcを読むときの事前知識
    - 言語はCで実装されている
    - 関数系はだいたい php-src/ext の下に拡張扱いで置かれて
    いる
    - C言語のマクロが使われており、初見だと大分わかりづらい
    - ソースファイル
    - php-src/ext/standard/php_var.h (定義)
    - php-src/ext/standard/var.c (実装)

    View Slide

  8. var_dump()の呼び出し部分

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  12. なるほど

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  16. var_dump()の実装 (array)

    View Slide

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

    View Slide

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

    View Slide

  19. var_dump()の実装 (array)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  24. まとめ

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  30. Thank you for listening!!!
    github: kuwako
    twitter: @MasakiKuwako

    View Slide