PHP의 method_exists() 함수는 특정 클래스나 객체에 해당 메서드가 정의되어 있는지 확인하는 데 사용됩니다. 동적으로 메서드를 호출하기 전에 메서드의 존재 여부를 미리 검사해야 할 때 유용하게 활용할 수 있습니다.
문법
method_exists(object, name_of_method)
매개변수
object − 검사 대상이 되는 객체 인스턴스 또는 클래스 이름
name_of_method − 존재 여부를 확인할 메서드 이름
반환값
method_exists() 함수는 지정한 객체(또는 클래스)에 해당 메서드가 정의되어 있으면 TRUE를 반환하고, 그렇지 않으면 FALSE를 반환합니다.
예제 1: 객체 인스턴스로 확인하기
다음은 Directory 클래스의 인스턴스를 생성한 뒤, 존재하지 않는 메서드를 검사하는 예제입니다.
<?php
$directory = new Directory('.');
var_dump(method_exists($directory, 'anything'));
?>
출력
bool(false)
'anything'이라는 메서드는 Directory 클래스에 정의되어 있지 않으므로 false가 반환됩니다.
예제 2: 클래스 이름으로 확인하기
객체 인스턴스 대신 클래스 이름을 문자열로 직접 전달하여 메서드의 존재 여부를 확인할 수도 있습니다.
<?php
var_dump(method_exists('Directory', 'read'));
?>
출력
bool(true)
read 메서드는 Directory 클래스에 실제로 정의되어 있으므로 true가 반환됩니다.
참고 사항
method_exists() 함수는 부모 클래스로부터 상속받은 메서드까지 포함하여 검사합니다. 다만 접근 제한자(private, protected)로 선언된 메서드라 하더라도 정의만 되어 있으면 true를 반환한다는 점에 유의하세요. 또한 __call() 같은 매직 메서드를 통해 동적으로 처리되는 메서드는 이 함수로 감지할 수 없으며, 이 경우에는 is_callable() 함수를 사용하는 것이 좋습니다.