PHPの開発中、さまざまなエラーや例外に遭遇することがよくありますが、最も一般的なエラーは「致命的なエラー:非オブジェクトのメンバー関数への呼び出し」です。通常、このエラーは、非オブジェクトでメソッドを呼び出そうとするときに発生します。この記事では、このエラーの原因、一般的なソリューション、およびこのタイプのエラーを効果的にデバッグする方法を紹介します。
最初に、単純なコードの例を使用して、このエラーの生成を理解しましょう。
クラスmyclass { パブリック関数mymethod(){ エコー「こんにちは、これは私の方法です!」; } } $ myobject = null; $ myobject-> mymethod(); //ここで致命的なエラーがトリガーされます
上記の例では、クラスMyClassとMyMethodのメソッドをそのクラスで定義します。次に、変数$ myobjectをnullに設定し、その方法をmymethodと呼びます。 $ myobjectは有効なオブジェクトではないため、「致命的なエラー:非表示のメンバー関数への呼び出し」エラーは、メソッドを呼び出すときにトリガーされます。
この問題を解決するには、メソッドを呼び出す前にターゲットオブジェクトが正しくインスタンス化されるようにする必要があります。一般的に使用されるソリューションは次のとおりです。
if($ myobject!= null){ $ myobject-> mymethod(); }
簡単なnullチェックを使用すると、オブジェクトがインスタンス化されていることを確認し、nullの場合は呼び出し方法を避けることができます。
if(ISSET($ myobject)){ $ myobject-> mymethod(); }
ISSET関数は、オブジェクトがnullではなく設定されているかどうかを確認します。この方法を使用して、メソッドを呼び出す前にオブジェクトが有効かどうかを確認します。
if(!empty($ myobject)){ $ myobject-> mymethod(); }
空の関数は、オブジェクトが空であるかどうかを確認できます。このメソッドを使用すると、オブジェクトが空になったときにメソッド呼び出しの作成を避けることもできます。
上記の方法とは別に、最も簡単な解決策は、メソッドを呼び出す前にオブジェクトが正しくインスタンス化されるようにすることです。
$ myobject = new MyClass(); $ myobject-> mymethod();
メソッドを呼び出す前にオブジェクトをインスタンス化することにより、オブジェクトが有効なオブジェクトであることを確認し、エラーのような発生を回避できます。
「致命的なエラー:非表示のメンバー関数への呼び出し」エラーは、通常、オブジェクトをインスタンス化しないメソッドを呼び出すことによって引き起こされます。この問題を解決するために、オブジェクトが空であるかどうかを確認し、ISSETまたは空の関数を使用し、メソッドを呼び出す前にオブジェクトが正しくインスタンス化されるようにすることにより、判断を下すことができます。さらに、同様のエラーが発生した場合、タイムリーにデバッグしてトラブルシューティングすることが非常に重要です。