Funcții predefinite în PHP
PHP vine cu peste 1000 de funcții predefinite, fiecare cu o sarcină anume, și poți apela oricare dintre ele direct din scriptul tău. Pentru lista completă, vezi referința noastră PHP.
Funcții definite de utilizator în PHP
Nu ești limitat la ce oferă PHP, pentru că poți scrie și funcții proprii.
- Gândește-te la o funcție ca la un grup de instrucțiuni pe care le poți refolosi în tot programul.
- Încărcarea unei pagini nu o rulează de la sine.
- Codul ei rulează doar când o apelezi.
Crearea unei funcții
Ca să îți declari propria funcție, scrie cuvântul cheie function, apoi numele pe care vrei să i-l dai.
Codul funcției se pune între o pereche de acolade: { marchează unde începe, iar } marchează unde se termină.
Notă: Numele funcțiilor trebuie să înceapă cu o literă sau cu un caracter de subliniere, iar PHP nu ține cont de majuscule și minuscule în ele.
Sfat: Alege un nume care spune ce face funcția, ca să îți fie codul mai ușor de citit.
Sintaxa unei funcții
Forma generală a unei funcții pe care o definești singur:
function functionName($parameter1, $parameter2) {
// code to be executed
return $value; // optional
}
Exemplu de creare a unei funcții
Iată una reală, numită myMessage(), care afișează un salut:
function myMessage() {
echo "Hello world!";
}
Apelarea unei funcții
Pentru a apela o funcție, ai nevoie doar de numele ei și de o pereche de paranteze ().
Când este apelată, aceasta afișează „Salut lume!”:
Apelarea unei funcții
Mai întâi definește myMessage(), apoi rulează funcția apelând-o:
Ieșire: script PHP
<?php
function myMessage() {
echo "Salut lume!";
}
myMessage();
?>
Parametrii funcțiilor în PHP
Parametrii sunt modul prin care îi dai informații unei funcții. În interiorul funcției, un parametru se comportă exact ca o variabilă.
Enumeră-i între parantezele de după numele funcției, separați prin virgulă. Nu există o limită pentru câți poți adăuga.
Funcție cu un parametru
familyName() primește un singur parametru, $fname. Fiecare apel transmite un alt prenume, pe care funcția îl combină cu același nume de familie, așa că fiecare linie afișată arată un prenume nou urmat de „Refsnes”:
Ieșire: script PHP
<?php
function familyName($fname) {
echo "$fname Refsnes.<br>";
}
familyName("Jani");
familyName("Hege");
familyName("Stale");
familyName("Kai Jim");
familyName("Borge");
?>
Funcție cu doi parametri
Această variantă primește doi parametri, $fname și $year, și îi afișează pe amândoi:
Ieșire: script PHP
<?php
function familyName($fname, $year) {
echo "$fname Refsnes. Născut în $year.<br>";
}
familyName("Hege", "1975");
familyName("Stale", "1978");
familyName("Kai Jim", "1983");
?>
Valoare implicită a parametrului în PHP
Un parametru poate avea o valoare de rezervă. Aici, dacă apelezi setHeight() fără argument, funcția folosește în schimb valoarea implicită:
Valoare implicită a parametrului
Primul apel transmite 350; al doilea nu transmite nimic, așa că $height ia valoarea de rezervă 50:
Ieșire: script PHP
<?php
function setHeight($height = 50) {
echo "Înălțimea este : $height <br>";
}
setHeight(350);
setHeight(); // va lua valoarea implicită 50
?>
Funcții în PHP - Returnarea valorilor
Când o funcție ajunge la return, se oprește imediat și trimite o valoare înapoi la linia de cod care a apelat-o:
Returnarea valorilor
sum() adună cele două argumente ale sale și îi dă totalul înapoi apelantului:
Ieșire: script PHP
<?php
function sum($x, $y) {
$z = $x + $y;
return $z;
}
echo "5 + 10 = " . sum(5, 10) . "<br>";
echo "7 + 13 = " . sum(7, 13) . "<br>";
echo "2 + 4 = " . sum(2, 4);
?>
Transmiterea argumentelor prin referință
Implicit, argumentele sunt transmise prin valoare: funcția lucrează cu o copie, așa că variabila originală pe care ai transmis-o rămâne neschimbată.
Transmiterea prin referință elimină această copie, ceea ce înseamnă că tot ce face funcția cu argumentul se întâmplă și cu variabila originală. Pentru asta, pune operatorul & în fața parametrului:
Transmitere prin referință
Pentru că $value este o referință, add_five() modifică chiar $num, de la 2 la 7:
Ieșire: script PHP
<?php
function add_five(&$value) {
$value += 5;
}
$num = 2;
add_five($num);
echo $num;
?>
Număr variabil de parametri
Uneori nu poți ști dinainte câte valori va primi o funcție. Pune operatorul ... în fața unui parametru și acesta va accepta oricâte. O astfel de funcție se numește funcție variadică.
Toate valorile colectate de acel parametru ajung sub forma unui tablou.
Există două reguli: o funcție poate avea un singur parametru de lungime variabilă și acesta trebuie să fie ultimul. Dacă îl pui în altă parte, PHP raportează o eroare.
Funcție variadică
sumMyNumbers() adună oricâte numere primește, în acest caz șase:
Ieșire: script PHP
<?php
function sumMyNumbers(...$x) {
$n = 0;
$len = count($x);
for($i = 0; $i < $len; $i++) {
$n += $x[$i];
}
return $n;
}
$a = sumMyNumbers(5, 2, 6, 2, 7, 7);
echo $a;
?>
Argumentul variadic ca ultim argument
Un parametru obișnuit poate veni primul, atât timp cât cel variadic se află pe ultima poziție:
Ieșire: script PHP
<?php
function myFamily($lastname, ...$firstname) {
$txt = "";
$len = count($firstname);
for($i = 0; $i < $len; $i++) {
$txt = $txt."Salut, $firstname[$i] $lastname.<br>";
}
return $txt;
}
$a = myFamily("Doe", "Jane", "John", "Joey");
echo $a;
?>
Eroare când argumentul variadic nu este ultimul
Aici ... se află la primul dintre cei doi parametri, așa că acest cod eșuează cu o eroare:
Ieșire: script PHP
<?php
function myFamily(...$firstname, $lastname) {
$txt = "";
$len = count($firstname);
for($i = 0; $i < $len; $i++) {
$txt = $txt."Salut, $firstname[$i] $lastname.<br>";
}
return $txt;
}
$a = myFamily("Doe", "Jane", "John", "Joey");
echo $a;
?>
PHP este un limbaj slab tipizat
Poate ai observat că niciunul dintre exemplele de până acum nu i-a spus lui PHP ce tip de date conține o variabilă.
Asta pentru că PHP deduce singur tipul din valoarea variabilei. Fără tipuri impuse, poți face lucruri precum adunarea unui șir de caractere numeric, de exemplu „5”, cu un număr întreg, fără să apară vreo eroare.
Declarațiile de tip au apărut în PHP 7. Ele îți permit să precizezi ce tip de date aștepți atunci când declari o funcție. Dacă activezi și declarația strict, un tip nepotrivit oprește scriptul cu o eroare „Fatal Error”.
Activezi modul strict cu declare(strict_types=1);, care trebuie să fie chiar prima instrucțiune din fișierul PHP.
Modul strict
Declarația strict este activată aici, iar funcția primește un număr și un șir de caractere. Pentru că „5 days” nu este un număr întreg, scriptul se încheie cu o eroare:
Ieșire: script PHP
<?php declare(strict_types=1); // cerință strictă
function addNumbers(int $a, int $b) {
return $a + $b;
}
echo addNumbers(5, "5 days");
// deoarece "5 days" nu este un întreg, va fi generată o eroare
?>
Declarații de tip de retur în PHP
Declarațiile de tip funcționează și pentru instrucțiunea return.
Ca să stabilești tipul pe care îl returnează o funcție, scrie două puncte : și tipul chiar înainte de acolada de deschidere { din declarație.
Declarație de tip de retur
Această funcție declară float ca tip de retur:
Ieșire: script PHP
<?php declare(strict_types=1); // cerință strictă
function addNumbers(float $a, float $b) : float {
return $a + $b;
}
echo addNumbers(1.2, 5.2);
?>
Tip de retur diferit
Tipul de retur nu trebuie neapărat să coincidă cu tipurile argumentelor, atât timp cât valoarea pe care o returnezi este într-adevăr de tipul declarat. Aici, rezultatul float este convertit la int:
Ieșire: script PHP
<?php declare(strict_types=1); // cerință strictă
function addNumbers(float $a, float $b) : int {
return (int)($a + $b);
}
echo addNumbers(1.2, 5.2);
?>