PHPでプログラムを組んでいると、得てして「Fatal error(致命的エラー)」が発生します。
当然致命的エラーなので、動作しません。
そこで原因を探るのですが、たまに「あれ?」と思うエラーがあります。
大抵のエラーは、文字の間違いであったり、;(セミコロン)が抜けていたりなど単純なものが多いのですが、今回「Uncaught Error」が発生しました。
一見なんのエラーかわからなかったのですが、調べて対処できましたので忘備録として記録いたします。
このようなエラーが発生しました
あまり見たくないエラー画面ですが、このようなエラーが発生しました。
ちなみに、ソースは以下の通りです。
<?php
$day->today();
class DAY
{
function today()
{
echo date("Y/m/d H:i:s");
}
}
?>
サンプルなので、当日を表示するだけの代物ですが、たったこれだけの記述で上記のエラーが発生しました。
何がいけないのかすぐわかる方は、同じような苦労をされておられると察します。
原因はクラス宣言抜け
サンプルでは、当日を表示する部分をクラスで作成しています。
クラスとは、宣言しない限り実体が発生しない記述方法です。
実体がないから、重複コーディングのリスクが低いメリットがあります。
ただ、クラスを実体化しないで使用すると「Fatal error (致命的エラー)」になります。
今回も単純にクラスを実体化していないだけでした。
次のように1行足すだけで解決しました。
クラス宣言を記述することで解決しました
<?php
$day = new DAY();
$day->today();
class DAY
{
function today()
{
echo date("Y/m/d H:i:s");
}
}
?>
$day = new DAY();
1行を追加してエラーが直りました。
クラス宣言が抜けていただけでした。
こんなミス普通しないよー。
と思うようなミスですが、以下のような条件時にうっかりやっていました。
- 関数の記述(行数)が長い
- 同じクラスを同一関数で複数個所で使用していた
- 関数の頭でクラス宣言していると思い込んでいた
クラスは宣言しないと使えません。
しかし、クラス宣言は関数をまたぐことができません。
つまり、関数ごとに宣言しなければいけません。
ここに落とし穴があり、「うっかり」の要因になっていました。
エラーを調べ自力解決することで能力が向上します
本エラーは、一見関数の引数ミスに見えるため引数を調べがちですが、引数に問題は見当たりません。
なので、迷宮入りしやすいです。
ググって調べて、クラス未宣言に気づけました。
うっかりは誰にでもあることです。
でもこういったことを経験し、時間がかかっても自力解決を繰り返すことで、自身の能力が向上してゆきます。
なので、良い経験をした出来事でした。