Понятие параметров
С помощью параметров мы можем передавать в функцию некоторые данные. Параметры определяются в скобках после названия функции как обычные переменные, оделенные друг от друга запятой.
При наименовании параметров применяются те же правила, что и для переменных. Также название параметров начинается со знака доллара $. Если параметр является обязательным – для него не нужно указывать значения. Для предопределённых параметров можно задать значение по умолчанию, которое будет использоваться при вызове функции, если этот параметр не был передан. Внутри самой функции мы можем использовать параметр так же как обычные переменные.
При вызове функции нам надо передать для параметра некоторое значение. Значения при вызове функции передаются в скобках, сколько функция определяет параметров, столько необходимо передать значений.
<?php
function displayInfo($name, $age)
{
echo "<div>Имя: $name <br />Возраст: $age</div><hr>";
}
displayInfo("Tom", 36);
displayInfo("Bob", 39);
displayInfo("Sam", 28);
?>
Необязательные параметры
Выше при определении функции мы были обязаны передать для всех параметров функции значения. Например, если функция определяет два параметра, соответственно нам надо передать в ее вызов два значения. Однако, PHP позволяет сделать параметры необязательными. Такие параметры имеют значение по умолчанию, которое применяется, если при вызове функции не передано никакого значения.
<?php
function displayInfo($name, $age = 18)
{
echo "<div>Имя: $name <br />Возраст: $age</div><hr>";
}
displayInfo("Tom", 36);
displayInfo("Sam");
?>
Здесь параметр $age
определяется как необязательный. Для этого ему присваивается начальное значение – число 18. Причем если функция содержит обязательные и необязательные параметры, то необязательные параметры должны определяться в конце (как в данном случае параметр $age
).
При первом вызове в функцию передаются два значения: displayInfo("Tom", 36)
, поэтому параметр $age получит второе значение – число 36.
Во втором вызове в функцию передается одно значение: displayInfo("Sam")
, поэтому параметр $age будет использовать значение по умолчанию – число 18.
Переменное количество параметров
В PHP функция может принимать переменное количество параметров. Для этого у функции определяется один параметр, перед которым указывается оператор … (три точки). Такой параметр рассматривается как массив:
<?php
function sum(...$numbers)
{
$result = 0;
foreach($numbers as $number) {
$result += $number;
}
echo "<p>Сумма: $result</p>";
}
sum(1, 2, 3);
sum(2, 3);
sum(4, 5, 8, 10);
?>
А если мы хотим передать готовый массив значений, как параметры функции? Чтобы его передать в функцию, опять же применяется оператор …, который указывается перед переменной массива:
<?php
function sum(...$numbers)
{
$result = 0;
foreach($numbers as $number) {
$result += $number;
}
echo "<p>Сумма: $result</p>";
}
$numbers = [3, 5, 7, 8];
sum(...$numbers); // 23
?>
Если функция должна принимать и другие параметры, то параметр, который представляет переменное количество значений, указывается в конце после остальных параметров.
Например, определим функцию, которая принимает имя студента и неопределенное количество его баллов успеваемости и выводит средний балл:
function getAverageScore($name, ...$scores)
{
$result = 0.0;
foreach($scores as $score) {
$result += $score;
}
$result = $result / count($scores);
echo "<p>$name: $result</p>";
}
getAverageScore("Tom", 5, 5, 4, 5);
getAverageScore("Bob", 4, 3, 4, 4, 4);
Баллы успеваемости передаются через параметр $scores
, который указывается в конце списка параметров. В самой функции для вычисления среднего балла все баллы складываются и делятся на их количество. Количество элементов массива можно подсчитать с помощью встроенной в PHP функции count(), в которую передается массив.
Область видимости
Вернёмся к примеру функции вычисления, високосности года.
Так как функция — это программа в программе, то внутри неё не будут доступны переменные, которые определялись за её пределами. Чтобы передать внутрь функции информацию извне, нужно использовать аргументы функции.
Аргументы функции — это переменные, которые функция может получить из внешнего кода. В примере с is_leap_year
такая переменная была только одна — $year
.
Верно и обратное — переменные, определённые внутри функции, не будут доступны извне. Такие переменные называются локальными, потому что они локальны по отношению к функции.
В отличие от аргументов, которых может быть несколько, вернуть во внешний код функция может только одно значение — с помощью инструкции return (возврат). Возвращаемое значение называют результатом работы функции.