Специальный метод "__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

Антипкин Михаил Сергеевич о метавселенной, открывающей безграничные возможности для инноваций и экспериментов Антипкин Михаил Сергеевич о метавселенной
Сёрфинг с браузером FraudFox: исчерпывающее руководство Сёрфинг с браузером FraudFox
Где найти лицензионные ключи активации к ПО? Где найти лицензионные ключи активации к ПО?
Курсы веб дизайна: обучение онлайн Курсы веб дизайна: обучение онлайн
Как продлить срок службы бытовой техники? Как продлить срок службы бытовой техники?
Основы VPS/VDS: что нужно знать перед арендой? Основы VPS/VDS: что нужно знать перед арендой?
Откройте для себя азарт Mostbet KZ - ведущего онлайн-казино для геймеров Откройте для себя азарт Mostbet KZ - ведущего онлайн-казино для геймеров
Топ-10 игр для Android стоимостью менее $5 Топ-10 игр для Android стоимостью менее $5
Проверка авто в базе ГИБДД перед покупкой Проверка авто в базе ГИБДД перед покупкой
Бизнес-психология в онлайн-институте Smart Бизнес-психология в онлайн-институте Smart
Как открыть расчётный счёт в банке для ИП и ООО? Как открыть расчётный счёт в банке для ИП и ООО?
Завис айфон: что делать? Завис айфон: что делать?
Обзор смартфона iPhone 15 Обзор смартфона iPhone 15
Системы видеонаблюдения в частном доме: характеристики и настройка Системы видеонаблюдения в частном доме: характеристики и настройка
Что такое партнёрская программа? Что такое партнёрская программа?
Анализируем рекламу Google Ads для оптимизации кампаний Анализируем рекламу Google Ads для оптимизации кампаний
Аренда сервера в immers.cloud Аренда сервера в immers.cloud
Мастерство самоорганизации: 5 приемов для успешного планирования Мастерство самоорганизации: 5 приемов для успешного планирования
Взлом голосовых помощников ультразвуком Взлом голосовых помощников ультразвуком
Как создавать промпты для ChatGPT: главные правила Как создавать промпты для ChatGPT: главные правила