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

Судя по описанию функции method_exists с сайта php.net:

method_exists
(PHP 4, PHP 5)

method_exists — Checks if the class method exists

Parameters

object - An object instance or a class name

method_name - The method name

Return Values
Returns TRUE if the method given by method_name has been defined for the given object , FALSE otherwise.

функция поддерживается PHP4 и позволяет использовать в качестве первого параметра имя класса, то есть с её помощью можно узнать есть в классе нужный метод или нет. На практике оказалось всё не так безоблачно - при проверке существования класса функция срабатывала без ошибки, но при проверке  существования заведомо существующего метода в классе ответ был false.

class Test {
    function t1() {}
}

$res = method_exists('Test', 't1');
var_dump($res);

результат bool(false).

Тот же код но на PHP 5 возращает true.

Решение - для проверки существования методов класса в PHP 4 можно использовать функцию is_callable:

is_callable
(PHP 4 >= 4.0.6, PHP 5)
is_callable — Verify that the contents of a variable can be called as a function
Description
bool is_callable ( callback $name [, bool $syntax_only = false [, string &$callable_name ]] )

Verify that the contents of a variable can be called as a function. This can check that a simple variable contains the name of a valid function, or that an array contains a properly encoded object and function name.
Parameters

name - Can be either the name of a function stored in a string variable, or an object and the name of a method within the object, like this:
array($SomeObject, 'MethodName')

syntax_only - If set to TRUE the function only verifies that name might be a function or method. It will only reject simple variables that are not strings, or an array that does not have a valid structure to be used as a callback. The valid ones are supposed to have only 2 entries, the first of which is an object or a string, and the second a string.

callable_name - Receives the "callable name". In the example below it is "someClass::someMethod". Note, however, that despite the implication that someClass::SomeMethod() is a callable static method, this is not the case.

Return Values
Returns TRUE if name is callable, FALSE otherwise.

Для проверки существования метода нужен только первый параметр: is_callable(array(<название класса>, 'название метода'));

Вариант проверки с использование функции is_callable:

class Test {
    function t1() {}
}

$res = is_callable(array('Test','t1'));
var_dump($res);

результат bool(true), что и требовалось.

 

Комментарии

Отправить комментарий

  • Доступны HTML теги: <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Строки и параграфы переносятся автоматически.
  • Search Engines will index and follow ONLY links to allowed domains.

Подробнее о форматировании

Введите решение задачи