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