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

Опубликовано: 06.09.2018

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

Урок 77 - Работа с файлами (проверка на существование)

Классы могут содержать динамические методы, наличие которых неочевидно внешнему разработчику. Кроме того, в процессе эксплуатации могут создаваться разнородные массивы объектов, которые могут содержать различные методы. Для подобных ситуаций необходимы инструменты проверки существования метода в классе. В качестве такого инструмента в 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()".

tillad

11131

IRC (Internet Relay Chat)
rss