Значения по умолчанию делают функции более удобными и гибкими. Вместо того, чтобы каждый раз передавать все аргументы, можно задать "запасной" вариант, который будет использоваться, если аргумент при вызове не указан. Это как в кофейне: если вы не говорите, какой кофе хотите, вам по умолчанию сделают капучино. В этом уроке мы научимся задавать такие значения по умолчанию для строк, чисел и других типов данных. Вы поймете важное правило о порядке параметров и увидите, как это упрощает вызов функций и делает код чище. Мы пройдем путь от простого синтаксиса до использования значений по умолчанию в более сложных сценариях.
- Модуль 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+
Ваш первый параметр по умолчанию
Сделаем функцию `greet` более универсальной. Если имя пользователя не передано при вызове, она должна выводить приветствие для 'Guest'. Дополните объявление функции, задав значение по умолчанию для параметра `$name`.
<?php
// Добавьте '= 'Guest'' к параметру
function greet($name input1S) {
echo "Hello, $name!";
}
greet(); // Вызовет функцию со значением по умолчанию
?>Переопределение значения по умолчанию
Значение по умолчанию используется только тогда, когда аргумент не передан. Если же аргумент указан, будет использовано именно переданное значение. Что выведет этот код?
<?php
function sendMessage($text = 'Hello') {
echo $text;
}
sendMessage('Hi there!');
?>Числовое значение по умолчанию
Функция `calculateBonus` рассчитывает бонус сотрудника. Если процент не указан, он по умолчанию равен 10% (0.1). Какой бонус будет рассчитан для зарплаты в 50000, если процент не передавать? Введите только число.
<?php
function calculateBonus($salary, $rate = 0.1) {
return $salary * $rate;
}
echo calculateBonus(50000);
?>Главное правило: порядок параметров
В PHP есть строгое правило: все обязательные параметры (без значения по умолчанию) должны быть объявлены перед необязательными (со значением по умолчанию). В этом коде правило нарушено, что приведет к фатальной ошибке. Исправьте объявление функции, поменяв параметры местами.
<?php// Неправильный порядок параметровfunction applySettings($theme = 'dark', $userId) { echo "Settings for user $userId, theme: $theme";}?>Несколько необязательных параметров
Функция `createPost` может принимать название и статус публикации. Сделайте оба параметра необязательными: `$title` по умолчанию должен быть 'New Post', а `$isPublished` — `false`. Соберите объявление функции из токенов.
<?php
function createPost(input1S, input2S) {
// ... логика создания поста
}
?>Использование null как значения по умолчанию
Часто `null` используется как значение по умолчанию, чтобы проверить, был ли аргумент передан. Что выведет этот код, если функция `findRecord` вызвана только с одним, обязательным аргументом?
<?php
function findRecord($id, $cache = null) {
if ($cache === null) {
return "Search without cache";
} else {
return "Search with cache";
}
}
echo findRecord(123);
?>Типизация и значения по умолчанию
Совместим две мощные возможности PHP: строгую типизацию и значения по умолчанию. Дополните объявление функции `setAttempts`, указав, что параметр `$count` должен быть целым числом (`int`) со значением по умолчанию 3.
<?php
declare(strict_types=1);
function setAttempts(input1S $count input2S 3) {
echo "Количество попыток: $count";
}
setAttempts();
?>Частичное переопределение
Функция `makeUrl` имеет два необязательных параметра. Мы вызываем ее, передавая аргумент для первого из них (`$path`), но не для второго (`$protocol`). Какой URL в итоге будет создан? Введите полный URL в поле ответа.
<?php
function makeUrl($domain, $path = '/', $protocol = 'https') {
return $protocol . '://' . $domain . $path;
}
echo makeUrl('site.com', '/news');
?>Недопустимые значения по умолчанию
Значением по умолчанию может быть только константное выражение (например, число, строка, `null`). Использование переменной, как в этом коде, недопустимо и вызовет ошибку. Исправьте код, заменив переменную `$defaultStatus` на её строковое значение 'pending'.
<?php$defaultStatus = 'pending'; function createTask($title, $status = $defaultStatus) { return "Task '$title' has status '$status'.";}?>