Parametrii funcției
Cu ajutorul parametrilor, putem transmite anumite date unei funcții. Parametrii sunt definiți între paranteze, după numele funcției, ca variabile obișnuite, separate prin virgulă.
De exemplu, să creăm și să apelăm o funcție cu un parametru:
<?php
function hello($name) {
echo "<h2>Hello $name</h2>";
}
hello("Tom");
hello("Bob");
hello("Sam");
?>
Aici, funcția hello definește un parametru - $name. La numirea parametrilor, se aplică aceleași reguli ca și pentru variabile. De asemenea, numele parametrilor începe cu semnul dolarului $. Singurul lucru care nu este necesar este să specificăm valoarea pentru parametru.
function hello($name)
În interiorul funcției, putem folosi parametrul ca pe o variabilă obișnuită. De exemplu, în acest caz, valoarea sa este afișată pe pagina web:
echo "<h2>Hello $name</h2>";
În continuare, la apelarea funcției, trebuie să transmitem o valoare pentru parametru. Valorile la apelarea funcției sunt transmise între paranteze; câți parametri definește funcția, atâtea valori trebuie să fie transmise.
În acest caz, funcția definește un parametru, astfel încât la apelarea funcției se transmite doar o valoare. Totuși, la fiecare apel, aceasta poate fi o valoare diferită:
hello("Tom");
hello("Bob");
hello("Sam");
Rezultatul programului:

Dacă nu transmitem o valoare pentru parametru: hello();, vom întâlni o eroare.
Ca valoare, putem transmite și valoarea unei variabile:
$userName = "Tom";
hello($userName);
Similar, putem defini funcții cu un număr mai mare de parametri:
<?php
function displayInfo($name, $age) {
echo "<div>Nume: $name <br />Vârstă: $age</div><hr>";
}
displayInfo("Tom", 36);
displayInfo("Bob", 39);
displayInfo("Sam", 28);
?>
Aici, funcția displayInfo definește doi parametri, astfel încât la apelarea funcției trebuie să transmitem două valori. Valorile sunt separate prin virgulă și transmise parametrilor în funcție de poziție.
Astfel, prima valoare este transmisă primului parametru, a doua valoare este transmisă celui de-al doilea parametru și așa mai departe. În final, obținem următorul rezultat:

Parametri opționali
Mai sus, la definirea funcției, am fost obligați să transmitem valori pentru toți parametrii funcției. De exemplu, dacă funcția definește doi parametri, trebuie să transmitem două valori la apelul funcției.
Totuși, PHP permite să facem parametrii opționali. Astfel de parametri au o valoare implicită, care este utilizată dacă nu se transmite nicio valoare la apelul funcției.
<?php
function displayInfo($name, $age = 18) {
echo "<div>Nume: $name <br />Vârstă: $age</div><hr>";
}
displayInfo("Tom", 36);
displayInfo("Sam");
?>
Aici, parametrul $age este definit ca opțional. Pentru aceasta, i se atribuie o valoare inițială - numărul 18. Dacă funcția conține parametri obligatorii și opționali, parametrii opționali trebuie să fie definiți la sfârșit (ca în acest caz, parametrul $age).
La primul apel, se transmit două valori funcției: displayInfo("Tom", 36), astfel parametrul $age primește valoarea 36.
La al doilea apel, se transmite doar o valoare funcției: displayInfo("Sam"), astfel parametrul $age va folosi valoarea implicită - numărul 18.

Parametri denumiți
Începând cu versiunea 8.0, PHP a adăugat suport pentru parametri denumiți. Până la PHP 8.0, la apelul funcției, valorile puteau fi transmise parametrilor doar în funcție de poziție. Parametrii denumiți permit transmiterea valorilor parametrilor după nume:
<?php
function displayInfo($name, $age = 18) {
echo "<div>Nume: $name <br />Vârstă: $age</div><hr>";
}
displayInfo(age: 23, name: "Bob");
displayInfo(name: "Tom", age: 36);
displayInfo(name: "Alice");
?>
La apelul funcției, mai întâi se specifică numele parametrului (fără simbolul $), și prin două puncte se specifică valoarea parametrului: age: 23, name: "Bob". În acest caz, nu este necesar să respectăm poziția parametrilor.

Putem combina transmiterea valorilor parametrilor după nume și poziție. Totuși, orice parametru denumit opțional trebuie să fie plasat după parametrii ne-denumiți:
displayInfo("Tom", age: 36);
Parametri variabili
În PHP, o funcție poate accepta un număr variabil de parametri. Pentru aceasta, la funcție se definește un parametru precedat de operatorul ... (trei puncte). Acest parametru este tratat ca un array:
<?php
function sum(...$numbers) {
$result = 0;
foreach($numbers as $number) {
$result += $number;
}
echo "<p>Suma: $result</p>";
}
sum(1, 2, 3);
sum(2, 3);
sum(4, 5, 8, 10);
?>
La apelul unei astfel de funcții, putem transmite un număr variabil de valori. Rezultatul:
Suma: 6
Suma: 5
Suma: 27
Să presupunem că avem un array de valori pe care vrem să-l transmitem funcției. Pentru a-l transmite, folosim din nou operatorul ..., plasat înaintea variabilei array-ului:
<?php
function sum(...$numbers) {
$result = 0;
foreach($numbers as $number) {
$result += $number;
}
echo "<p>Suma: $result</p>";
}
$numbers = [3, 5, 7, 8];
sum(...$numbers); // 23
?>
Dacă funcția trebuie să accepte și alți parametri, parametrul care reprezintă un număr variabil de valori trebuie plasat la sfârșit, după ceilalți parametri.
De exemplu, să definim o funcție care acceptă numele unui student și un număr variabil de note și afișează media notelor:
<?php
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);
?>
Notele sunt transmise prin parametrul $scores, care este plasat la sfârșitul listei de parametri. În funcție, pentru a calcula media notelor, toate notele sunt adunate și împărțite la numărul lor.
Numărul elementelor din array poate fi calculat folosind funcția count() din PHP, care primește array-ul ca parametru.
