Этот урок посвящен работе с функциями, которые принимают произвольное количество аргументов. Вы освоите классические функции func_get_args(), func_num_args() и func_get_arg(), а также современный синтаксис с оператором ... (spread/rest). Эти инструменты позволяют создавать гибкие функции без жесткой привязки к количеству параметров. В заданиях вы будете заполнять пропуски, находить ошибки, собирать код из частей и предсказывать результаты выполнения. Каждое упражнение усложняется и охватывает разные аспекты темы — от простого получения всех аргументов до комбинирования различных подходов в одной функции.
- Модуль 1: Основы синтаксиса PHP
- Модуль 2: Переменные и типы данных
- Модуль 3: Операторы
- Модуль 4: Условные конструкции
- Модуль 5: Циклы
- Модуль 6: Массивы
- Индексированные массивы.
- Ассоциативные массивы.
- Многомерные массивы.
- Добавление элементов в массив.
- Удаление элементов из массива.
- Функция count().
- Функция array_push() и array_pop().
- Функция array_shift() и array_unshift().
- Функция array_merge().
- Функция array_slice().
- Функция array_splice().
- Функция in_array().
- Функция array_search().
- Функция array_keys() и array_values().
- Функция array_unique().
- Функция array_reverse().
- Сортировка: sort(), rsort().
- Сортировка: asort(), arsort().
- Сортировка: ksort(), krsort().
- Функция array_map().
- Функция array_filter().
- Функция array_reduce().
- Функция array_walk().
- Функция array_column().
- Деструктуризация массивов.
- Модуль 7: Функции
- Объявление функций.
- Вызов функций.
- Параметры функций.
- Возврат значений return.
- Значения параметров по умолчанию.
- Передача по значению.
- Передача по ссылке.
- Переменное количество аргументов.
- Оператор распаковки ....
- Типизация параметров.
- Типизация возвращаемых значений.
- Nullable типы.
- Union типы (PHP 8).
- Именованные аргументы (PHP 8).
- Анонимные функции.
- Стрелочные функции.
- Замыкания и use.
- Рекурсивные функции.
- Глобальные переменные в функциях.
- Статические переменные в функциях.
- Модуль 8: Работа со строками
- Одинарные и двойные кавычки.
- Экранирование символов.
- Heredoc и Nowdoc синтаксис.
- Функция strlen().
- Функция substr().
- Функция str_replace().
- Функция strpos() и strrpos().
- Функция explode() и implode().
- Функция trim(), ltrim(), rtrim().
- Функция strtolower() и strtoupper().
- Функция ucfirst() и ucwords().
- Функция str_repeat().
- Модуль 9: Суперглобальные переменные
- Модуль 10: Работа с формами
- Модуль 11: Работа с файлами
- Модуль 12: Дата и время
- Модуль 13: Регулярные выражения
- Модуль 14: Сессии и Cookie
- Модуль 15: Include и Require
- Модуль 16: Объектно-ориентированное программирование
- Модуль 17: Пространства имен
- Модуль 18: Обработка ошибок и исключений
- Модуль 19: Работа с JSON и XML
- Модуль 20: Работа с базами данных MySQLi
- Модуль 21: PDO - PHP Data Objects
- Модуль 22: Composer и зависимости
- Модуль 23: cURL и HTTP запросы
- Модуль 24: REST API
- Модуль 25: Безопасность
- Модуль 26: Генераторы и итераторы
- Модуль 27: Reflection API
- Модуль 28: Работа с изображениями
- Модуль 29: Отправка email
- Модуль 30: Паттерны проектирования
- Модуль 31: Тестирование
- Модуль 32: Продвинутые возможности PHP 8+
Получение всех аргументов функции
Функция должна получить все переданные аргументы и вывести их в виде массива.
<?php
function showArgs() {
$args = input1S;
input2S($args);
}
showArgs('первый', 'второй', 'третий');Подсчет переданных аргументов
Определите, что выведет функция при вызове с указанными аргументами.
<?php
function countArgs() {
return func_num_args();
}
echo countArgs(10, 20, 30, 40);Исправьте доступ к аргументу по индексу
В коде ошибка: функция пытается получить несуществующий аргумент. Исправьте строку с func_get_arg().
<?phpfunction getSecond() { return func_get_arg(3);} echo getSecond('a', 'b', 'c');Синтаксис с оператором расширения
Используйте современный PHP-синтаксис для объявления функции с переменным количеством аргументов.
<?php
function sumAll(input1S) {
return input2S($numbers);
}
echo sumAll(5, 10, 15, 20);Результат работы с разными типами аргументов
Определите, что выведет код при вызове функции с разными типами данных.
<?php
function joinArgs() {
$args = func_get_args();
return implode('-', $args);
}
echo joinArgs('PHP', 7, 'урок');Функции для работы с аргументами
Сопоставьте функции с их назначением, расположив правую колонку в правильном порядке.
func_num_args()func_get_arg($index)func_get_args()Соберите функцию для умножения чисел
Соберите функцию, которая перемножает все переданные числа. Есть лишние строки.
echo multiply(2, 3, 4); foreach ($nums as $n) {function multiply(...$nums) { $result *= $n;<?php } return $result; $result = 1; $result = 0;return array_sum($nums);function multiply($nums) {Заполните функцию фильтрации
Создайте функцию, которая оставляет только положительные числа из переданных аргументов.
<?php
function filterPositive(input1S) {
$filtered = input2S(function($v) {
return $v input3S 0;
}, $values);
return input4S($filtered);
}
print_r(filterPositive(-5, 3, -2, 8, 0, 12));Восстановите порядок строк функции
Функция должна находить максимальное значение среди переданных чисел. Используется func_get_args() и цикл.
function findMax() { $max = $arg; foreach ($args as $arg) {<?php } return $max; $args = func_get_args(); if ($arg > $max) {echo findMax(3, 45, 12, 89, 7);}Вычислите результат комбинированной функции
Функция берет первый аргумент как множитель, а остальные складывает и умножает на него.
<?php
function calculate() {
$multiplier = func_get_arg(0);
$rest = array_slice(func_get_args(), 1);
$sum = array_sum($rest);
return $multiplier * $sum;
}
echo calculate(2, 10, 5, 3);Исправьте синтаксис оператора расширения
В объявлении функции ошибка в использовании оператора ..., из-за чего аргументы передаются неправильно.
<?phpfunction mergeAll($... items) { return implode(', ', $items);} echo mergeAll('яблоко', 'груша', 'банан');Комбинирование подходов к работе с аргументами
Функция проверяет количество аргументов и в зависимости от этого использует разные способы их получения.
<?php
function process() {
if (input1S > 2) {
$args = input2S;
$extras = array_slice($args, 2);
return count($extras);
} else {
$first = input3S(0);
$second = input3S(1);
return $first + $second;
}
}
echo process(5, 10, 15, 20, 25) . ' ';
echo process(7, 3);