概要
状態:-
閲覧数:46,688
投稿日:2010-04-27
更新日:2013-04-06
○○ファイルの△△行目付近(以前)で、オブジェクトに関連付けられていないメンバー関数を呼び出したことによる、致命的エラー
致命的エラー
・オブジェクトに関連付けられていないメンバー関数の呼び出し
ファイルのパスと行番号
・○○ ファイル △△ 行目
1.インスタンス作成以前の、メンバー関数呼び出し
2.メンバー関数を呼び出す際のオブジェクト名が、作成したインスタンス名と異なる
3.「子クラスで明示的に呼び出していない親クラスコンストラクタ」内に記述された内容に関連するメソッドの呼び出し
エラーメッセージ
Fatal error: Call to a member function **() on a non-object in ○○ on line △△
エラーレベル
致命的エラー
原因
・オブジェクトに関連付けられていないメンバー関数の呼び出し
ファイルのパスと行番号
・○○ ファイル △△ 行目
遭遇例
1.インスタンス作成以前の、メンバー関数呼び出し
2.メンバー関数を呼び出す際のオブジェクト名が、作成したインスタンス名と異なる
3.「子クラスで明示的に呼び出していない親クラスコンストラクタ」内に記述された内容に関連するメソッドの呼び出し
遭遇例1.インスタンス作成以前の、メンバー関数呼び出し
遭遇例
▽インスタンス作成以前に、メンバー関数を呼び出した
class CHARACTER{
function CHARACTER($stamina){//コンストラクタ
処理内容;
}
function get_stamina(){
処理内容;
}
}
$character->get_stamina();
$character = new CHARACTER(60);
対応例
▽インスタンス作成後、メンバー関数を実行
class CHARACTER{
function CHARACTER($stamina){//コンストラクタ
処理内容;
}
function get_stamina(){
処理内容;
}
}
$character = new CHARACTER(60);
$character->get_stamina();
遭遇例2.メンバー関数を呼び出す際のオブジェクト名が、作成したインスタンス名と異なる
遭遇例
▽メンバー関数を呼び出す際のオブジェクト名が、作成したインスタンス名と異なる
class CHARACTER{
function CHARACTER($stamina){//コンストラクタ
処理内容;
}
function get_stamina(){
処理内容;
}
}
$character = new CHARACTER(60);
$characterman->get_stamina();
対応例
▽作成したインスタンス名で、メンバー関数を呼び出す
class CHARACTER{
function CHARACTER($stamina){//コンストラクタ
処理内容;
}
function get_stamina(){
処理内容;
}
}
$character = new CHARACTER(60);
$character->get_stamina();
遭遇例3.「子クラスで明示的に呼び出していない親クラスコンストラクタ」内に記述された内容に関連するメソッドの呼び出し
遭遇例
・「子クラスで明示的に呼び出していない親クラスコンストラクタ」内に記述された内容に関連するメソッドの呼び出し
対応例
parent::__construct();//派生クラスのコンストラクタ内で、基底クラスのコンストラクタを実行
補足
・PHP仕様により、親クラスのコンストラクタは自動実行されない
・本来であれば子クラス側から明示的に呼び出す必要があるのだが、その記述が抜けていたため、親クラスコンストラクタに記述された処理内容は、実質的にないものと同じ状態になっていた
・その状態で、関連するメソッドを呼び出そうとしても、存在しないメンバー関数の呼び出しとなり、同エラー
Fatal error: Class '**' not found in ○○ on line △△
Fatal error: Class declarations may not be nested in ○○ on △△