PHP Fatal error: Uncaught Error: Call to a member function に対処

でプログラムを組んでいると、得てして「Fatal error(致命的エラー)」が発生します。
当然致命的エラーなので、動作しません。

そこで原因を探るのですが、たまに「あれ?」と思うエラーがあります。

大抵のエラーは、文字の間違いであったり、;(セミコロン)が抜けていたりなど単純なものが多いのですが、今回「Uncaught Error」が発生しました。

一見なんのエラーかわからなかったのですが、調べて対処できましたので忘備録として記録いたします。

このようなエラーが発生しました

あまり見たくないエラー画面ですが、このようなエラーが発生しました。
ちなみに、ソースは以下の通りです。

サンプルなので、当日を表示するだけの代物ですが、たったこれだけの記述で上記のエラーが発生しました。

何がいけないのかすぐわかる方は、同じような苦労をされておられると察します。

原因はクラス宣言抜け

サンプルでは、当日を表示する部分をクラスで作成しています。
クラスとは、宣言しない限り実体が発生しない記述方法です。
実体がないから、重複コーディングのリスクが低いメリットがあります。

ただ、クラスを実体化しないで使用すると「Fatal error (致命的エラー)」になります。

今回も単純にクラスを実体化していないだけでした。

次のように1行足すだけで解決しました。

クラス宣言を記述することで解決しました

$day = new DAY();

1行を追加してエラーが直りました。
クラス宣言が抜けていただけでした。

こんなミス普通しないよー。
と思うようなミスですが、以下のような条件時にうっかりやっていました。

  • 関数の記述(行数)が長い
  • 同じクラスを同一関数で複数個所で使用していた
  • 関数の頭でクラス宣言していると思い込んでいた

クラスは宣言しないと使えません。
しかし、クラス宣言は関数をまたぐことができません。
つまり、関数ごとに宣言しなければいけません。

ここに落とし穴があり、「うっかり」の要因になっていました。

エラーを調べ自力解決することで能力が向上します

本エラーは、一見関数の引数ミスに見えるため引数を調べがちですが、引数に問題は見当たりません。
なので、迷宮入りしやすいです。

ググって調べて、クラス未宣言に気づけました。

うっかりは誰にでもあることです。
でもこういったことを経験し、時間がかかっても自力解決を繰り返すことで、自身の能力が向上してゆきます。

なので、良い経験をした出来事でした。

今回のレポートは以上です。
読んでいただいてありがとうございました。


ホームページに関するお悩み事やご相談事がございましたら私どもまでご連絡ください。 鋭意ご対応申し上げます。
ホームページのご提案もさせていただいております