Параметры функции
С помощью параметров мы можем передавать в функцию некоторые данные. Параметры определяются в скобках после названия функции как обычные переменные, оделенные друг от друга запятой.
Например, создадим и вызовем функцию с одним параметром:
<?
function hello($name)
{
echo "<h2>Hello $name</h2>";
}
hello("Tom");
hello("Bob");
hello("Sam");
Здесь функция hello
определяет один параметр - $name
. При наименовании параметров применяются те же
правила, что и для переменных.
Также название параметров начинается со знака доллара $
. Единственное, что не нужно указывать значение для
параметра.
function hello($name);
Внутри самой функции мы можем использовать параметр так же как обычные переменные. Например, в данном случае его значение выводится на веб-страницу:
echo "<h2>Hello $name</h2>";
В дальнейшем при вызове функции нам надо передать для параметра некоторое значение. Значения при вызове функции передаются в скобках, сколько функция определяет параметров, столько необходимо передать значений.
Так, в данном случае функция определяет один параметр, соответственно при вызове функции передается только одно значение. Однако при каждом вызове это может быть разное значение:
hello("Tom");
hello("Bob");
hello("Sam");
Результат работы программы:
Hello Tom
Hello Bob
Hello Sam
Если мы не передадим значение для параметра: hello();
, то мы столкнемся с ошибкой.
В качестве значения в функцию может передаваться и значение переменной:
$userName = "Tom";
hello($userName);
Подобным образом можно определять функции и с большим количеством параметров:
<?
function displayInfo($name, $age)
{
echo "<div>Имя: $name <br />Возраст: $age</div><hr>";
}
displayInfo("Tom", 36);
displayInfo("Bob", 39);
displayInfo("Sam", 28);
Здесь функция displayInfo определяет два параметра, соответственно при вызове функции нам надо передать в функцию два значения. Значения отделяются запятой и передаются параметрам по позиции. Так, первое значение передается первому параметру, второе значение передается второму параметру и так далее. В итоге мы получим следующий результат:
Имя: Tom
Возраст: 36
Имя: Bob
Возраст: 39
Имя: Sam
Возраст: 28
Необязательные параметры
Выше при определении функции мы были обязаны передать для всех параметров функции значения. Например, если функция определяет два параметра, соответственно нам надо передать в ее вызов два значения. Однако, 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.
Имя: Tom
Возраст: 36
Имя: Sam
Возраст: 18
Именнованные параметры
Начиная с версии 8.0 в PHP была добавлена поддержка именнованных параметров
. Так, до PHP 8.0
при вызове функции значения
можно было передать параметрам только по позиции
. Именнованные параметры позволяют передавать
значения параметрам по имени:
<?
function displayInfo($name, $age = 18)
{
echo "<div>Имя: $name <br />Возраст: $age</div><hr>";
}
displayInfo(age: 23, name: "Bob");
displayInfo(name: "Tom", age: 36);
displayInfo(name: "Alice");
При вызове функции сначала указывается название параметра (без символа $
) и через двоеточие указывается значение
параметра : age: 23, name: "Bob"
.
И в этом случае нам необязательно соблюдать позицию параметров.
Имя: Bob
Возраст: 23
Имя: Tom
Возраст: 36
Имя: Alice
Возраст: 18
Можно сочетать передачу значений параметрам по имени и по позиции. При этом любые именованные необязательные параметры должны располагаться после не именованных параметров:
displayInfo("Tom", age: 36);
Переменное количество параметров
В 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);
При обращении к подобной функции мы можем передавать в нее различное количество значений. Результат:
Сумма: 6
Сумма: 5
Сумма: 27
Но, допустим, готовый массив значений, которые мы хотим передать в функцию. Чтобы его передать в функцию, опять же применяется оператор ..., который указывается перед переменной массива:
<?
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()
, в которую передается массив.