Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

皆さん

Slide 4

Slide 4 text

var_dump()に

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

var_dump()の呼び出し部分

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

なるほど

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

var_dump()の実装 (array)

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

var_dump()の実装 (array)

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

まとめ

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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

Slide 27

Slide 27 text

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

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

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

Slide 30

Slide 30 text

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