Метод call в PHP
Опубликовано: 05.09.2018
Специальный метод "__call()" предназначен для создания динамических методов. Если метод "__call()" перегружен в классе, обращение к несуществующему методу не приведёт к ошибке, а передаст управление методу "__call()". В качестве первого параметра метод принимает имя вызываемого метода, а в качестве второго массив, содержащий в качестве элементов параметры, которые были переданы при вызове метода. В отличие от других языков программирования, в PHP отсутствуют функции с переменным количеством параметров. Тем не менее, при помощи специального метода "__call()" можно эмулировать наличие таких функций в классе.
Продемонстрируем пример, для этого создадим класс "_byCall" который предоставит два рабочих метода это "byMin" и "byMax", принимающие произвольное количество числовых параметров и определяющие минимальное и максимальное значение.
class _byCall { public function __call($_name, $_param) { if (!is_array($_param)) return false; return ($_name == 'byMax') ? max($_param) : min($_param); } } $new_byCall = new _byCall(); echo $new_byCall->byMax(123, 234, 324, 4443, 234) # 4443 .'<br>'. $new_byCall->byMin(231, 123, 31, 61, 324); # 31В зависимости от вызываемого метода "byMax" или "byMin", используется два разных способа для поиска результата, если не передано ни одного аргумента, возвращается значение "false". Важно отметить, что вызов методов при помощи оператора разрешения области видимости "::" для динамических классов, заканчивается ошибкой. Для обращения к динамическим методам обязательно требуется создание объекта. Взаимодействие специального метода "__call()" с уже существующими в классе методами отличается от акцессоров "__get()" и "__set()", если метод существует закрытый или открытый, то "__call()" не задействуется.
How to use jQuery AJAX method to call a PHP page
Пример:
class _byCall { public function __call($_name, $_param) { if (!is_array($_param)) return false; return ($_name == 'byMax') ? max($_param) : min($_param); } public function byMax($a, $b) { return 'Функция byMax'; } public function byMin($a, $b) { return 'Функция byMin'; } } $new_byCall = new _byCall(); echo $new_byCall->byMax(123, 234, 324, 4443, 234) # Результат: Функция byMax; .'<br>'. $new_byCall->byMin(231, 123, 31, 61, 324); # Результат: Функция byMin;Класс, члены класса, методы unset, call PHP
tillad
4191