PHP ファイルを整形する手順

スニペットでもファイル全体でも貼り付けて「PHP コード整形」を押します。インデントはブラウザー内で 1 レベルにつきタブ 1 つに書き換えられ、コードが実行されることも、出力が生成されることも、どこかへ送信されることもありません。

結果では、コードではなく文字列として扱うべき部分がそのまま残ります。ヒアドキュメント/ナウドックの本文、# や // のコメント、閉じ ?> と次の開始タグの間の HTML です。これらはバイト単位で戻るため、テンプレートでは重要です。そこに入った余分なインデントは表示結果を変えてしまうからです。

  1. 上のフィールドのサンプルを消して PHP を貼り付けます。断片でもクラスでもテンプレートファイル全体でも同じように扱えます。
  2. 「PHP コード整形」を押すと、下に結果が表示され、プレーンテキストではなく PHP の文法で色分けされます。
  3. 「コピー」で色のないコードをクリップボードへ取り出せます。数行だけ欲しいときは結果から必要な範囲を選択してください。
  4. おかしいと感じたらフィールドを直してもう一度実行します。それまでの間、前の結果は薄く表示され、前の入力に対するものだと示されます。

フォーマッターが変える部分と変えない部分

フォーマッターが変えるもの

1 行に書かれた文はセミコロンで分割され、波括弧は独立した行に移り、入れ子 1 段ごとにタブが 1 つ増えます。圧縮されたクラスが読みやすくなる一方で、出力は入力と行単位では一致しなくなります。空行は削除され、インデントは常にタブ、長い配列や引数リストは折り返さず 1 行のままです。4 スペースで書くプロジェクトは、貼り付けたあとにそのプロジェクトのフォーマッターを通す必要があります。

そのままコピーされる部分

ヒアドキュメントとナウドックの本文は文字列出力なので、PHP 7.3 以降で使えるインデント付きの終了マーカーも含めてバイト単位でコピーされます。# や // で始まる行コメントはコメントとして扱われ、波括弧としては解釈されません(# 波括弧を {x} で説明する、といった記述で重要です)。PHP 8 の属性 #[Route('/x')] はコメントを開かないため、コードとして扱われます。?> と次の <?php の間のテキストは HTML に属し、インデントし直されません。foreach (...): の中に <?= ... ?> があるテンプレートのループも、マークアップを保ったまま戻ります。

このツールが向かない場面

構文木ではなく文字を読むツールなので、コードを実行せず、構文も検証しません。閉じ忘れた波括弧や引用符はエラーではなく、書いたままの形で戻ります。色分けは整形の後に実行され、およそ 120 KB を超えるとページの応答性を保つために省略されるため、大きなファイルは色なしで表示されます。ちょっとした整理以上の用途では、php-cs-fixer、PHP_CodeSniffer、エディター内蔵のフォーマッターがプロジェクトのスタイルと空行を保ったまま、貼り付けた一部ではなくツリー全体に適用できます。

最近使ったツール: