ホームページ制作 オフィスオバタ

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

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行を追加してエラーが直りました。
クラス宣言が抜けていただけでした。

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

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

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

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

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

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

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

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

モバイルバージョンを終了