はじめに
多くのPHPはHTMLの出力を行いますが、PHPの中にHTMLとJavaScriptを書き込む事が多く、特にJavaScriptはバグが有ると全く動きません。「PHP Intelephense」はバグを表示し、修正するとバグの表示は消えます。ここまでは普通の話なので、読み飛ばして下さい。最初は以下の記事に助けて貰えると期待したのですが、違う現象でした。
不可解なエラーが発生
PHPとJavaScriptのコードには一切バグは無く、そのコードは全くエラーを発生しないでブラウザで動作するのに「PHP Intelephense」はそのコード全体を「真っ赤」にするようなエラーを示してくれました。
バグ探しの開始
PHPのコード全体にエラーがという事で何処からスタートすれば良いのか?Google検索で調べても全く解答が得られずに、今更ですが「ChatGPT」に「PHPにJavaScriptを組み合わせたコードには全くバグが無いのにPHP Intelephenseにより全体がエラーだと表示される理由は?」と聞いたら?「JavaScriptを外部ファイルにしたら」と提案されました。
SQLは無視して「JavaScriptを上から消してみた」
実はこれが正解でした。JavaScriptをモジュール毎に上から消してみました。最初は100ステップ程度をばっさり消して「PHP Intelephense」の反応を見ました。これが大正解で、見事に「真っ赤」な現象は収まりました。でも100ステップから問題を探すのは大変なので、消したコードを戻して「JavaScript」のモジュールを更に細分化して消してみたところが、5ステップ程度で真っ赤な状態が収まり、その中だと判明しました。
PHPでもJavaScriptでも無ければ「HTML」を疑え
細分化したJavaScriptの中に記述されたコードの中になんともつまらないエラーが?存在していました。コードは短縮していますが、実際には500文字程度ありまして、HTMLを書き換える(innerHTML)コードになります。あまりにも長いので閉じるタグを見落としていたのが原因です。
<a href="javascript:oo1()"><input type="button" value="" style="font-size:1.4vh;"></div>
これを以下に変更
<a href="javascript:oo1()"><input type="button" value="" style="font-size:1.4vh;"></a>
エラーの画面をお見せします。
こんな画面をみても仕方が有りませんが、エラー画面の右側の一部で、HTMLのタグが一つだけ違う事でこんな事になってしまいます。類似するHTMLのコードが全部エラーとされたようですが、そのHTMLに間違いはありません。
phpの中のJavaScript内のHTMLのタグの問題でコード全体が真っ赤になります。
開発者としてのアプローチ
最近、話題になっている以下の記事を読ませて頂きましたが、開発者として「コマンドやシンタックス」を覚える事以上に問題に対する「アプローチの引き出し」を増やすことが大切だと、今回の問題を通じて再認識しました。