>  기사  >  백엔드 개발  >  php 객체 지향 OOP — __call은 호출 오류를 처리합니다.

php 객체 지향 OOP — __call은 호출 오류를 처리합니다.

WBOY
WBOY원래의
2016-08-08 09:23:06922검색

프로그램 개발 시 객체를 사용하여 객체의 내부 메소드를 호출할 때 호출된 메소드가 존재하지 않으면 프로그램에서 오류가 발생하고 프로그램이 종료되어 더 이상 실행할 수 없습니다. 그래서 프로그램이 객체 내부에 존재하지 않는 메소드를 호출할 때 호출된 메소드와 사용된 매개변수가 존재하지 않는다는 메시지가 표시될 수 있지만, 이때 프로그램은 계속 실행될 수 있습니다. 존재하지 않는 메소드를 호출하면 자동으로 호출됩니다. 메소드 "__call()".

//이것은 테스트 클래스이므로 속성과 메소드가 없습니다.
class Test
{
}
/ /Test 클래스의 객체 생성
$test = new Test();
//객체에 존재하지 않는 메소드 호출
$test->demo("one", "two ", " three ");
//여기서는 프로그램이 실행되지 않습니다
echo "이것은 테스트입니다
";
?>

위의 예에서는 다음 오류가 발생하며 일반적으로 프로그램을 계속 실행할 수 없습니다.

치명적입니다. 오류: 정의되지 않은 메서드 호출 Test::demo()

아래에 "__call()" 메서드를 추가합니다. 이 메서드는 2개의 매개변수는 존재하지 않는 메소드를 호출하는 과정입니다. __call() 메소드가 자동으로 호출되면 존재하지 않는 메소드의 메소드 이름이 에 전달됩니다. 두 번째 매개변수인 매개변수는 배열 형식으로 이 메소드의 여러 매개변수를 전달하는 것입니다.

//테스트 클래스이므로 속성과 메소드가 없습니다.
class Test
{
//존재하지 않는 메소드 호출 시 자동으로 호출되는 메소드 첫 번째 매개변수는 메소드 이름, 두 번째 매개변수는 배열 매개변수
function __call($function_name, $args) {
print "호출한 함수: $function_name(parameters: ";
print_r($args );
echo ")가 존재하지 않습니다!

";
}
}
// 테스트 클래스 객체 생성
$test=new Test();
//객체에 존재하지 않는 메서드 호출
$test->demo("one", "two", "Three ");
//프로그램은 종료되지 않으며 여기서 실행할 수 있습니다
echo "이것은 테스트입니다
";
?>

위 예제의 출력 결과는 다음과 같습니다.

호출한 함수: 데모(매개변수: 배열([0] = > 1 [1] => 2 [2] => 3 ))이 존재하지 않습니다!
테스트입니다

위 내용은 "땅콩튀김"에서 인용했습니다. 형님, 감사합니다. 형 공유.

위의 내용을 포함하여 PHP 객체지향 OOP-__call 처리 호출 오류에 대해 소개합니다. PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.