PHP 개발 과정에서, 우리는 종종 다양한 오류와 예외가 발생합니다. 가장 일반적인 오류는 다음과 같습니다. "치명적인 오류 : 비 객체의 멤버 기능 호출"입니다. 이 오류는 일반적으로 비 객체에서 메소드를 호출하려고 할 때 발생합니다. 이 기사에서는이 오류의 원인, 공통 솔루션 및 이러한 유형의 오류를 효과적으로 디버깅하는 방법을 소개합니다.
간단한 코드 예제를 통해이 오류의 생성을 먼저 이해해 봅시다.
클래스 myclass { 공개 기능 myMethod () { 에코 "안녕하세요, 이것이 내 방법입니다!"; } } $ myObject = null; $ myObject-> myMethod (); // 치명적인 오류가 여기에서 트리거됩니다
위의 예에서는 클래스 myclass를 정의하고 메소드 MyMethod가 해당 클래스에서 정의됩니다. 다음으로, 우리는 변수 $ myObject를 null로 설정하고 메소드를 myMethod라고 부릅니다. $ myObject는 유효한 객체가 아니기 때문에 메소드를 호출 할 때 "치명적인 오류 : 비 객체에서 멤버 함수로 호출"오류가 트리거됩니다.
이 문제를 해결하려면 메소드를 호출하기 전에 대상 객체가 올바르게 인스턴스화되도록해야합니다. 일반적으로 사용되는 몇 가지 솔루션은 다음과 같습니다.
if ($ myObject! = null) { $ myObject-> myMethod (); }
간단한 널 체크를 사용하면 객체가 인스턴스화되었는지 확인하고 무효 일 때 메소드를 호출하지 않도록 할 수 있습니다.
if (isset ($ myObject)) { $ myObject-> myMethod (); }
ISSET 함수는 객체가 설정되어 있는지 여부를 확인합니다. 이 메소드를 사용하여 메소드를 호출하기 전에 객체가 유효한 지 확인하십시오.
if (! empty ($ myObject)) { $ myObject-> myMethod (); }
빈 함수는 물체가 비어 있는지 확인할 수 있습니다. 이 방법을 사용하면 객체가 비어있을 때 메소드 호출을 피할 수도 있습니다.
위의 방법 외에도 가장 간단한 솔루션은 메소드를 호출하기 전에 객체가 올바르게 인스턴스화되도록하는 것입니다.
$ myObject = new MyClass (); $ myObject-> myMethod ();
메소드를 호출하기 전에 객체를 인스턴스화함으로써 객체가 유효한 객체인지 확인하여 오류와 같은 발생을 피할 수 있습니다.
"치명적인 오류 : 객체가 아닌 객실에서 멤버 함수로 호출"오류는 일반적으로 오브젝트를 인스턴스화하지 않는 메소드를 호출하여 발생합니다. 이 문제를 해결하기 위해, 우리는 객체가 비어 있는지, ISSET 또는 빈 함수를 사용하여 객체가 비어 있는지 확인하고 메소드를 호출하기 전에 객체가 올바르게 인스턴스화되는지 확인하여 판단 할 수 있습니다. 또한 유사한 오류가 발생하면 적시에 디버깅하고 문제를 해결하는 것이 매우 중요합니다.