Метод call в PHP

Специальный метод "__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()" не задействуется.

Пример:


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;


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

captcha

Сайты:



Новые отзывы о сайтах:

Авторизация

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

captcha

Напомнить пароль
Создание учётной записи

captcha

Напомнить пароль

captcha

Войти в личный кабинет