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

Simple Strategy to Read PHP More Easily

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for inouehi inouehi
November 10, 2023

Simple Strategy to Read PHP More Easily

『ちょこっとラクするPHPコード読解術』

Qiita Night〜PHP〜
2023/11/10 19:15~
https://increments.connpass.com/event/297095/

Avatar for inouehi

inouehi

November 10, 2023
Tweet

More Decks by inouehi

Other Decks in Technology

Transcript

  1. 12 解決策(再掲) • コードベース全体を理解しようとしない。 ◦ 目的を絞る、確認する機能を絞る。 ◦ issueを起点に読み始めるようにしている。 • 思考過程やメモをコード中に書きながら読み進める。

    ◦ コードの外に書こうとすると、メモと該当箇所の紐付けが煩わしい。 • 確認したいことをどこかに箇条書きしながら読み進める。 ◦ 読んでいる内に目的を忘れるのを防ぐ。読むのに集中できる。 • 簡単化する。 ◦ シンプルな処理で挙動を確認する。 ◦ 徐々に複雑にしながら、挙動の差異に着目して処理を追う。 • 機械に委譲する。☜本日のスコープ
  2. 13 解決策(再掲) • コードベース全体を理解しようとしない。 ◦ 目的を絞る、確認する機能を絞る。 ◦ issueを起点に読み始めるようにしている。 • 思考過程やメモをコード中に書きながら読み進める。

    ◦ コードの外に書こうとすると、メモと該当箇所の紐付けが煩わしい。 • 確認したいことをどこかに箇条書きしながら読み進める。 ◦ 読んでいる内に目的を忘れるのを防ぐ。読むのに集中できる。 • 簡単化する。 ◦ シンプルな処理で挙動を確認する。 ◦ 徐々に複雑にしながら、挙動の差異に着目して処理を追う。 • 機械に委譲する。☜本日のスコープ
  3. 17 index.phpを読みに行くと… ステップ実行 $app = require_once __DIR__.'/../bootstrap/app.php'; $kernel = $app->make(Kernel::class);

    $response = $kernel->handle( $request = Request::capture() )->send(); $kernel->terminate($request, $response);
  4. 18 ジャンプできない… ステップ実行 $app = require_once __DIR__.'/../bootstrap/app.php'; $kernel = $app->make(Kernel::class);

    $response = $kernel->handle( $request = Request::capture() )->send(); $kernel->terminate($request, $response);
  5. 21 ステップ実行 class Application public function make($abstract, array $parameters =

    []) { $this->loadDeferredProviderIfNeeded($abstract = $this->getAlias($abstract));__________ return parent::make($abstract, $parameters); } 実際の処理順に従いメソッドの中に進む
  6. 23 ステップ実行 if文があると… protected function loadDeferredProviderIfNeeded($abstract) { if ($this->isDeferredService($abstract) &&

    ! isset($this->instances[$abstract])) { $this->loadDeferredProvider($abstract); } } メソッド
  7. 24 ステップ実行 if文があると… protected function loadDeferredProviderIfNeeded($abstract) { if ($this->isDeferredService($abstract) &&

    ! isset($this->instances[$abstract])) { $this->loadDeferredProvider($abstract); } } メソッド 変数 変数
  8. 25 ステップ実行 if文があると… protected function loadDeferredProviderIfNeeded($abstract) { if ($this->isDeferredService($abstract) &&

    ! isset($this->instances[$abstract])) { $this->loadDeferredProvider($abstract); } } メソッド 変数 変数 プロパティ
  9. 26 ステップ実行 trueなのかfalseなのか目で確認できる protected function loadDeferredProviderIfNeeded($abstract) { if ($this->isDeferredService($abstract) &&

    ! isset($this->instances[$abstract])) { $this->loadDeferredProvider($abstract);__________________________________________ } }
  10. 35 scopeメソッドの中にブレークポイントを仕掛けて処理を実行すると… スタックトレース class Post extends Model { use HasFactory;

    public function scopeTitle($query, $str) { ⚫ return $query->where('name', $str);__________________________________________ } }
  11. 42 • Xdebugを使って静的解析を読む時は並列処理をoffにしましょう。 • Xdebug以外にも便利なツールたち。 ◦ IDE ◦ ChatGPT ◦

    PHPUnit and more... • とはいえ前提知識が多いに越したことはない。 ◦ 例えば、PHPのマジックメソッドを知らないとなぜ呼び出されるのかわからない おまけのTips