PHP - Funkcije


PHP ugrađene funkcije

Funkcija je samostalni blok koda koji vrši određeni zadatak. PHP ima ogromnu kolekciju unutarašnjih ili ugrađenih funkcija koje možete pozvati direktno unutar svojih PHP skripti kako biste izvršili određeni zadatak, poput gettype(), print_r(), var_dump, itd.



PHP korisnički definisane funkcije

Pored ugrađenih funkcija, PHP vam omogućava i da definišete svoje vlastite funkcije. To je način kreiranja paketa koda za višekratnu upotrebu koji izvode određene zadatke i mogu se odvojeno čuvati i održavati u glavnom programu. Evo nekih prednosti upotrebe funkcija:

  • Funkcije smanjuju ponavljanje koda unutar programa - Funkcija vam omogućava da izdvojite najčešće korišteni blok koda u jednu komponentu. Sada možete obavljati isti zadatak pozivanjem ove funkcije gdje god želite unutar svoje skripte, bez potrebe za kopiranjem i lijepljenjem istog bloka koda iznova i iznova.
  • Funkcije olakšavaju održavanje koda - Budući da se jednom stvorena funkcija može koristiti više puta bilo kakve promjene izvršene unutar funkcije automatski se implementiraju na svim mjestima.
  • Funkcije olakšavaju otklanjanje grešaka - Kada je program podijeljen na funkcije i ako dođe do bilo kakve greške tačno znate koja funkcija je uzrokovala grešku i gdje je pronaći. Zbog toga popravljanje grešaka postaje mnogo lakše.
  • Funkcije se mogu ponovo upotrijebiti u drugim aplikacijama - Budući da je funkcija odvojena od ostatka skripte, istu je funkciju moguće ponovno upotrijebiti u drugim aplikacijama samo dodavanjem php datoteke koja sadrži te funkcije.

Sljedeći dio će vam pokazati kako lako možete definisati svoju funkciju u PHP-u.



Stvaranje i pozivanje funkcija

Osnovna sintaksa kreiranja prilagođene funkcije može se napisati kao:

function functionName(){
    // Kod koji se treba izvršiti
}

Deklaracija korisnički definisane funkcije započinje s riječi function, nakon čega slijedi naziv funkcije koju želite stvoriti, nakon čega slijede zagrade tj. () i na kraju kod vaše funkcije se stavljaju vitičaste zagrade {}.

<?php
// Definisanje funkcije
function whatIsToday(){
    echo "Danas je " . date('l', mktime());
}
// Pozivanje funkcije
whatIsToday();
?>
Pogledajmo kako koristiti primjer u praksi:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>PHP Funkcije</title>
</head>
<body>

<?php
// Definisanje funkcije
function whatIsToday(){
    echo "Danas je " . date('l', mktime());
}
// Pozivanje funkcije
whatIsToday();
?>

</body>
</html>


Funkcije s parametrima

Možete odrediti parametre kada definišete svoju funkciju za prihvatanje ulaznih vrijednosti u vrijeme izvođenja. Parametri djeluju poput rezervisanih varijabli unutar funkcije. Zamjenjuju ih u vremenu pokretanja vrijednostima (poznatim kao argument) koje su funkciji dobile u trenutku poziva.

function myFunc($oneParameter, $anotherParameter){
    // Kod koji se treba izvršiti
}

Možete definisati onoliko parametara koliko želite. Međutim, za svaki parametar koji navedete, odgovarajući argument mora biti prosljeđen funkciji kad se poziva. Funkcija getSum() u sljedećem primjeru uzima dvije cjelobrojne vrijednosti kao argumente, jednostavno ih zbraja, a zatim prikazuje rezultat u pretraživaču.

<?php
// Definisanje funkcije
function getSum($num1, $num2){
  $sum = $num1 + $num2;
  echo "Suma ova dva broja $num1 i $num2 je : $sum";
}
 
// Pozivanje funkcije
getSum(10, 20);
?>
Pogledajmo kako koristiti primjer u praksi:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>PHP Funkcije s parametrima</title>
</head>
<body>

<?php
// Definisanje funkcije
function getSum($num1, $num2){
  $sum = $num1 + $num2;
  echo "Suma ova dva broja $num1 i $num2 je : $sum";
}
 
// Pozivanje funkcije
getSum(10, 20);
?>

</body>
</html>

Izlaz gornjeg programa biće:


Suma ova dva broja 10 i 20 je : 30




Funkcije sa opcionalnim parametrima i zadanim vrijednostima

Takođe možete kreirati funkcije s opcionalnim parametrima - samo ubacite naziv parametra, nakon čega slijedi znak jednako (=), a zatim zadana vrijednost, poput ove.

<?php
// Definisanje funkcije
function customFont($font, $size=1.5){
    echo "<p style=\"font-family: $font; font-size: {$size}em;\">Hello, world!
";
}
 
// Pozivanje funkcije
customFont("Arial", 2);
customFont("Times", 3);
customFont("Courier");
?>
Pogledajmo kako koristiti primjer u praksi:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>PHP Funkcije s opcionalnim parametrima</title>
</head>
<body>

<?php
// Definisanje funkcije
function customFont($font, $size=1.5){
    echo "<p style=\"font-family: $font; font-size: {$size}em;\">Hello, world!
";
}
 
// Pozivanje funkcije
customFont("Arial", 2);
customFont("Times", 3);
customFont("Courier");
?>

</body>
</html>

Kao što vidite, treći poziv customFont() ne uključuje drugi argument. To izaziva da PHP engine koristi zadanu vrijednost za $size parametar koji je 1,5.



Vraćanje vrijednosti iz funkcije

Funkcija može vratiti vrijednost nazad u skriptu koja je pozvala funkciju pomoću izjave return. Vrijednost može biti bilo koje vrste, uključujući nizove i objekte.

<?php
// Definisanje funkcije
function getSum($num1, $num2){
    $total = $num1 + $num2;
    return $total;
}
 
// Ispis vraćene vrijednosti
echo getSum(5, 10); // Ispisuje: 15
?>
Pogledajmo kako koristiti primjer u praksi:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>PHP Vraćanje vrijednosti iz funkcije</title>
</head>
<body>

<?php
// Definisanje funkcije
function getSum($num1, $num2){
    $total = $num1 + $num2;
    return $total;
}
 
// Ispis vraćene vrijednosti
echo getSum(5, 10); // Ispisuje: 15
?>

</body>
</html>

Funkcija ne može vratiti više vrijednosti. Međutim, slične rezultate možete dobiti vraćanjem niza, kao što je prikazano u sljedećem primjeru.

<?php
// Definisanje funkcije
function divideNumbers($dividend, $divisor){
    $quotient = $dividend / $divisor;
    $array = array($dividend, $divisor, $quotient);
    return $array;
}
 
// Dodijelite varijable kao da su niz
list($dividend, $divisor, $quotient) = divideNumbers(10, 2);
echo $dividend;  // Ispisuje: 10
echo $divisor;   // Ispisuje: 2
echo $quotient;  // Ispisuje: 5
?>
Pogledajmo kako koristiti primjer u praksi:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>PHP Vraćanje vrijdnosti niz uz pomoć funkcije</title>
</head>
<body>

<?php
// Definisanje funkcije
function divideNumbers($dividend, $divisor){
    $quotient = $dividend / $divisor;
    $array = array($dividend, $divisor, $quotient);
    return $array;
}
 
// Dodijelite varijable kao da su niz
list($dividend, $divisor, $quotient) = divideNumbers(10, 2);
echo $dividend;  // Ispisuje: 10
echo $divisor;   // Ispisuje: 2
echo $quotient;  // Ispisuje: 5
?>

</body>
</html>


Prosljeđivanje argumenata funkciji referencom

U PHP-u postoje dva načina na koje možete argumentovati funkciju: vrijednosti i referencom. Argumenti funkcije se prema zadanim podešavanjima prenose po vrijednosti, tako da ako se vrijednost argumenta unutar funkcije promijeni, to ne utiče izvan funkcije. Međutim, kako bi funkcije dozvolile da izmijene svoje argumente, moraju se prosljediti referencama. Prosljeđivanje argumenata referencom vrši se dodavanjem znaka (&) u ime argumenta u definiciji funkcije, kao što je prikazano u sljedećem primjeru:

<?php
/* Definisanje funkcije koja množi broj
sam sa sobom i vraća novu vrijednost */
function selfMultiply(&$number){
    $number *= $number;
    return $number;
}
 
$mynum = 5;
echo $mynum; // Ispisuje: 5
 
selfMultiply($mynum);
echo $mynum; // Ispisuje: 25
?>
Pogledajmo kako koristiti primjer u praksi:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>PHP Prosljeđivanje argumenata putem reference</title>
</head>
<body>

<?php
/* Definisanje funkcije koja množi broj
sam sa sobom i vraća novu vrijednost */
function selfMultiply(&$number){
    $number *= $number;
    return $number;
}
 
$mynum = 5;
echo $mynum; // Ispisuje: 5
 
selfMultiply($mynum);
echo $mynum; // Ispisuje: 25
?>

</body>
</html>


Razumevanje promenljivog opsega

Možete promeniti promenljive bilo gde u PHP skripti. No, lokacija deklaracije određuje opseg vidljivosti varijable unutar PHP programa, tj. gdje se varijabli može koristiti ili pristupiti. Ova pristupačnost poznata je kao varijabilni opseg. Promjenjive deklarisane unutar funkcije su prema zadanim podešavanjima lokalne i sa njima se ne može gledati ili manipulisati izvan te funkcije, kao što je prikazano u sljedećem primjeru :

<?php
// Definisanje funkcije
function test(){
    $greet = "Hello World!";
    echo $greet;
}
 
test(); // Ispisuje: Hello World!
 
echo $greet; // Generiše undefined variable error
?>
Pogledajmo kako koristiti primjer u praksi:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>PHP Korištenje funkcijske vanjske varijable</title>
</head>
<body>

<?php
// Definisanje funkcije
function test(){
    $greet = "Hello World!";
    echo $greet;
}
 
test(); // Ispisuje: Hello World!
 
echo $greet; // Generiše undefined variable error
?>

</body>
</html>

Slično tome, ako pokušate pristupiti ili uvoziti vanjsku varijablu unutar funkcije, dobit ćete nedefinisanu grešku varijable, kao što je prikazano u sljedećem primjeru:

<?php
$greet = "Hello World!";
 
// Definiše funkciju
function test(){
    echo $greet;
}
 
test();  // Generiše undefined variable error
 
echo $greet; // Ispisuje: Hello World!
?>

Kao što možete vidjeti u gornjim primjerima, varijabla deklarisana unutar funkcije nije dostupna izvan, isto tako varijabla deklarisana izvan funkcije nije dostupna unutar funkcije. Ovo razdvajanje smanjuje šansu varijabli unutar funkcije na koje utiču varijable u glavnom programu.



Globalna ključna riječ

Može doći do situacije kada trebate uvesti varijablu iz glavnog programa u funkciju ili obrnuto. U takvim slučajevima možete koristiti globalnu ključnu riječ prije varijabli unutar funkcije. Ova ključna riječ pretvara varijablu u globalnu varijablu, čineći je vidljivom ili dostupnom i unutar i izvan funkcije, kao što je prikazano u sljedećem primjeru:

<?php
$greet = "Hello World!";
 
// Definisanje funkcije
function test(){
    global $greet;
    echo $greet;
}
 
test(); // Ispisuje: Hello World!
echo $greet; // Ispisuje: Hello World!
 
// Dodijelite novu vrijednost varijabli
$greet = "Goodbye";
 
test(); // Ispisuje: Goodbye
echo $greet; // Ispisuje: Goodbye
?>
Pogledajmo kako koristiti primjer u praksi:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>PHP Globalne ključne riječi</title>
</head>
<body>

<?php
$greet = "Hello World!";
 
// Definisanje funkcije
function test(){
    global $greet;
    echo $greet;
}
 
test(); // Ispisuje: Hello World!
echo $greet; // Ispisuje: Hello World!
 
// Dodijelite novu vrijednost varijabli
$greet = "Goodbye";
 
test(); // Ispisuje: Goodbye
echo $greet; // Ispisuje: Goodbye
?>

</body>
</html>


Kreiranje rekurzivnih funkcija

Rekurzivna funkcija je funkcija koja sebe poziva iznova i iznova dok se ne ispuni neko stanje. Rekurzivne funkcije često se koriste za rješavanje složenih matematičkih izračunavanja ili za obradu duboko ugniježđenih struktura, npr. ispis svih elemenata duboko ugniježđenog niza. Sljedeći primjer pokazuje kako funkcioniše rekurzivna funkcija.

<?php
// Definisanje rekuzivne funkcije
function printValues($arr) {
    global $count;
    global $items;
    
    // Ulaz za provjeru je niz
    if(!is_array($arr)){
        die("ERROR: Provjerite, ulaz nije niz");
    }
    
    /*
    Prelistajte niz, ako je rekurzivni niza pozovite funkcija else,
    dodaje vrijednost koja se nalazi u polju izlaznih stavki
    i povećajte brojač za 1 za svaku pronađenu vrijednost
    */
    foreach($arr as $a){
        if(is_array($a)){
            printValues($a);
        } else{
            $items[] = $a;
            $count++;
        }
    }
    
    // Vratite ukupan broj i vrijednosti pronađene u nizu
    return array('total' => $count, 'values' => $items);
}
 
// Definišite ugniježđeni niz
$species = array(
    "birds" => array(
        "Orao",
        "Lasta",
        "Golu"
    ),
    "mammals" => array(
        "Human",
        "cat" => array(
            "Tigar",
            "Puma",
            "Jaguar"
        ),
        "Slon",
        "Majmun"
    ),
    "reptiles" => array(
        "snake" => array(
            "Kobra" => array(
                "Kraljevska kobra",
                "Egipatska kobra"
            ),
            "Poskok",
            "Anakonda"
        ),
        "Krokodil",
        "Dinosaurus" => array(
            "T-rex",
            "Alamosaurus"
        )
    )
);
 
// Broj i ispis vrijednosti u ugniježđenom polju
$result = printValues($species);
echo $result['total'] . ' value(s) found: ';
echo implode(', ', $result['values']);
?>
Pogledajmo kako koristiti primjer u praksi:

<!DOCTYPE html>
<html lang="en">
<head>
    <title>PHP Rekuzivne funkcije</title>
</head>
<body>

<?php
// Definisanje rekuzivne funkcije
function printValues($arr) {
    global $count;
    global $items;
    
    // Ulaz za provjeru je niz
    if(!is_array($arr)){
        die("ERROR: Provjerite, ulaz nije niz");
    }
    
    /*
    Prelistajte niz, ako je rekurzivni niza pozovite funkcija else,
    dodaje vrijednost koja se nalazi u polju izlaznih stavki
    i povećajte brojač za 1 za svaku pronađenu vrijednost
    */
    foreach($arr as $a){
        if(is_array($a)){
            printValues($a);
        } else{
            $items[] = $a;
            $count++;
        }
    }
    
    // Vratite ukupan broj i vrijednosti pronađene u nizu
    return array('total' => $count, 'values' => $items);
}
 
// Definišite ugniježđeni niz
$species = array(
    "birds" => array(
        "Orao",
        "Lasta",
        "Golu"
    ),
    "mammals" => array(
        "Human",
        "cat" => array(
            "Tigar",
            "Puma",
            "Jaguar"
        ),
        "Slon",
        "Majmun"
    ),
    "reptiles" => array(
        "snake" => array(
            "Kobra" => array(
                "Kraljevska kobra",
                "Egipatska kobra"
            ),
            "Poskok",
            "Anakonda"
        ),
        "Krokodil",
        "Dinosaurus" => array(
            "T-rex",
            "Alamosaurus"
        )
    )
);
 
// Broj i ispis vrijednosti u ugniježđenom polju
$result = printValues($species);
echo $result['total'] . ' value(s) found: ';
echo implode(', ', $result['values']);
?>

</body>
</html>