Переменное количество аргументов

Тренажер по PHP для пользователей с начальным уровнем подготовки.

Тренажер PHP

Этот урок посвящен работе с функциями, которые принимают произвольное количество аргументов. Вы освоите классические функции func_get_args(), func_num_args() и func_get_arg(), а также современный синтаксис с оператором ... (spread/rest). Эти инструменты позволяют создавать гибкие функции без жесткой привязки к количеству параметров. В заданиях вы будете заполнять пропуски, находить ошибки, собирать код из частей и предсказывать результаты выполнения. Каждое упражнение усложняется и охватывает разные аспекты темы — от простого получения всех аргументов до комбинирования различных подходов в одной функции.

Список тем

Получение всех аргументов функции

id: 38990_task1

Функция должна получить все переданные аргументы и вывести их в виде массива.

Заполните пропуски
<?php
function showArgs() {
    $args = input1S;
    input2S($args);
}

showArgs('первый', 'второй', 'третий');
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Подсчет переданных аргументов

id: 38990_task2

Определите, что выведет функция при вызове с указанными аргументами.

Что должно получиться?
<?php
function countArgs() {
    return func_num_args();
}

echo countArgs(10, 20, 30, 40);
Сообщения
Проверить
Показать подсказку

Исправьте доступ к аргументу по индексу

id: 38990_task3

В коде ошибка: функция пытается получить несуществующий аргумент. Исправьте строку с func_get_arg().

Найдите ошибку и исправьте
<?php
function getSecond() {
    return func_get_arg(3);
}
 
echo getSecond('a', 'b', 'c');
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Синтаксис с оператором расширения

id: 38990_task4

Используйте современный PHP-синтаксис для объявления функции с переменным количеством аргументов.

Заполните пропуски
<?php
function sumAll(input1S) {
    return input2S($numbers);
}

echo sumAll(5, 10, 15, 20);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Результат работы с разными типами аргументов

id: 38990_task5

Определите, что выведет код при вызове функции с разными типами данных.

Выберите правильный вариант ответа
<?php
function joinArgs() {
    $args = func_get_args();
    return implode('-', $args);
}

echo joinArgs('PHP', 7, 'урок');
Сообщения
Проверить
Показать подсказку

Функции для работы с аргументами

id: 38990_task6

Сопоставьте функции с их назначением, расположив правую колонку в правильном порядке.

Сопоставьте строки в правой части с соответствующими строками в левой по порядковому номеру
Получить все аргументы как массив
Узнать количество переданных аргументов
Получить конкретный аргумент по его позиции
func_num_args()
func_get_arg($index)
func_get_args()
Сообщения
Проверить
Показать подсказку

Соберите функцию для умножения чисел

id: 38990_task7

Соберите функцию, которая перемножает все переданные числа. Есть лишние строки.

Перетяните в правильном порядке строки из одного блока в другой
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) {
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Заполните функцию фильтрации

id: 38990_task8

Создайте функцию, которая оставляет только положительные числа из переданных аргументов.

Нужно правильно расставить в пропуски предложенные варианты
<?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));
...$values
array_filter
>
array_values
<
array_map
$values
==
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Восстановите порядок строк функции

id: 38990_task9

Функция должна находить максимальное значение среди переданных чисел. Используется 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);
}
Сообщения
Проверить
Показать подсказку

Вычислите результат комбинированной функции

id: 38990_task10

Функция берет первый аргумент как множитель, а остальные складывает и умножает на него.

Что должно получиться?
<?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);
Сообщения
Проверить
Показать подсказку

Исправьте синтаксис оператора расширения

id: 38990_task11

В объявлении функции ошибка в использовании оператора ..., из-за чего аргументы передаются неправильно.

Найдите ошибку и исправьте
<?php
function mergeAll($... items) {
    return implode(', ', $items);
}
 
echo mergeAll('яблоко', 'груша', 'банан');
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку

Комбинирование подходов к работе с аргументами

id: 38990_task12

Функция проверяет количество аргументов и в зависимости от этого использует разные способы их получения.

Заполните пропуски
<?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);
Сообщения
Проверить
Показать решение на 3 сек.
Показать подсказку
НайтиКурс.Ру