Проверка существования метода в PHP
Вход Регистрация

Проверка существования метода в PHP

Классы могут содержать динамические методы, наличие которых неочевидно внешнему разработчику. Кроме того, в процессе эксплуатации могут создаваться разнородные массивы объектов, которые могут содержать различные методы. Для подобных ситуаций необходимы инструменты проверки существования метода в классе. В качестве такого инструмента в PHP выступает функция "method_exists()".

Функция в качестве первого параметра принимает имя класса или объект, а в качестве второго имя метода и возвращает "true", если объект или класс имеет данный метод, и "false" в противном случае.

Продемонстрируем работу функции "method_exists()" и создадим класс "myExists", который будет содержать два метода, открытый и закрытый.


class myExists {
	public function method_public() {
		echo 'Открытый метод';
	}

	private function method_private() {
		echo 'Закрытый метод';
	}
}

$_Class_myExists = new myExists();

if(method_exists($_Class_myExists, 'method_public'))
{
	echo '<div>Метод "method_public" существует</div>';
}

if(method_exists($_Class_myExists, 'method_private'))
{
	echo '<div>Метод "method_private" существует</div>';
}

if(method_exists($_Class_myExists, 'method_protected'))
{
	echo '<div>Метод "method_protected" существует</div>';
}
else
{
	echo '<div>Метод "method_protected" не существует</div>';
}

В примере при помощи функции "method_exists()" в объекте класса "myExists" проверяется наличие существующих методов "method_public()", "method_private()" и не существующего метода "method_protected()". Результат:


Метод "method_public" существует
Метод "method_private" существует
Метод "method_protected" не существует

Как видно из результата проверки, функция возвращает "true" для каждого из методов, независимо от его спецификатора доступа, "false" возвращается только в том случае, если объект не обладает ни закрытым, ни открытым методом с таким именем.

В качестве первого аргумента функции "method_exists()" используется объект класса "$_Class_myExists", однако для проверки метода вовсе не обязательно создавать объект, достаточно передать имя класса. Пример:


method_exists('myExists', 'method_public');

При работе с функцией "method_exists()" следует учитывать, что она не может определить наличие динамических методов, созданных при помощи специального метода "__call()", "__callStatic()".

Помимо функции "method_exists()" можно воспользоваться альтернативной функцией "is_callable()", которая в отличие от "method_exists()", кроме проверки метода класса позволяет проверить существование функции, не входящей в состав класса.

Работая со сторонним классом, разработчик зачастую не знает досконально всех методов данного класса. Для того чтобы получить их полный список, можно воспользоваться функцией "get_class_methods()". В качестве первого параметра функция принимает имя класса, а возвращает массив его открытых методов. Следует подчеркнуть, что закрытые методы этой функцией не возвращаются. Пример:


$_all_pulic_method = get_class_methods($_Class_myExists);
echo '<pre>';
print_r($_all_pulic_method);
echo '</pre>';

Результат:


Array
(
    [0] => method_public
)

Как можно видеть, закрытый метод "method_private()" не включён в результирующий массив. Динамические методы, которые эмулируются при помощи специального метода "__call()", "__callStatic()", также не попадают в список, получаемый при помощи функции "get_class_methods()".


Комментировать

captcha

Вход

Зарегистрируйтесь, если нет учетной записи

Напомнить пароль
Регистрация
Напомнить пароль
Войти в личный кабинет