PHP開発では、エラーメッセージ「Nullのメンバー関数への呼び出し」または「非オブジェクトメソッドを呼び出す」と報告することが非常に一般的です。このタイプのエラーは通常、正常にインスタンス化されていないオブジェクト上のメソッドを呼び出そうとしていることを意味します。つまり、変数は実際にはオブジェクトではありません。
この問題を理解するには、明確にする必要があります。PHPでは、オブジェクトタイプの変数のみがメソッドを呼び出すことができます。非オブジェクト変数(nullや文字列など)でメソッドを呼び出すと、システムは同様のエラーをスローします。
このようなエラーにつながる2つの主な状況を次に示します。
コード内のオブジェクトのメソッドを使用しようとする場合、オブジェクトが正しく作成されていることを確認する必要があります。クラスファイルが正しく導入されていない場合、名前空間が正しくない場合、またはコンストラクターに構文エラーがある場合、オブジェクトをインスタンス化することはできません。
ソリューションは次のとおりです。
class Foo {
// コンストラクターに構文エラーはありません
public function __construct() {
echo 'Hello, World!';
}
}
// 間違った使用法:インスタンス化せずにメソッドを呼び出します
Foo::bar(); // Fatal error
// 正しい使用法:最初にオブジェクトをインスタンス化します
$foo = new Foo();
$foo->bar(); // Fatal error: 未定義の方法 bar()
別の一般的な問題は、コード実行中にオブジェクト変数をnullに設定するか、他の非オブジェクトタイプに値を誤って割り当てることで、メソッドを呼び出すときにエラーがトリガーされることです。
解決:
class Foo {
public function bar() {
echo 'Hello, World!';
}
}
// エラーの例:オブジェクトはに設定されています null
$foo = null;
$foo->bar(); // Fatal error: Call to a member function bar() on null
// 正しい例:最初にオブジェクトをインスタンス化します
$foo = new Foo();
$foo->bar(); // 出力 Hello, World!
PHPの「非オブジェクトメソッドを呼び出す」エラーは、主に誤ってインスタンス化されたオブジェクトまたはオブジェクト変数が誤って割り当てられていることによって引き起こされます。合理的なオブジェクトの初期化ロジックと厳密な可変検査メカニズムにより、このようなエラーは効果的に回避でき、コードの品質と堅牢性を改善できます。