Függvényargumentumok

Az információ a függvényekhez az argumentumlistán keresztül jut el, ami egy vesszővel határolt változó és/vagy konstanslista.

A PHP támogatja az érték szerinti (ez az alapértelmezett), cím szerinti paraméterátadást, és az argumentumok kezdőértékét. A változó hosszúságú argumentumlisták csak a PHP 4-ben jelentek meg. Lásd a változó hosszúságú argumentumlistákat és a func_num_args(), func_get_arg() és a func_get_args() függvényeket részletesebb leírásért. Hasonló hatás érhető el PHP 3-ban a függvénynek tömbargumentum átadásával:


function tombot_kezel($input)
{
    echo "$input[0] + $input[1] = ", $input[0]+$input[1];
}

     

Argumentumok cím szerinti átadása

Alapértelmezésben a függvényargumentumok érték szerint adódnak át (vagyis ha megváltoztatod a változót a függvényen belül, annak a függvényen kívülre nincs hatása). Ha szeretnéd megengedni, hogy a függvény módosítsa az argumentumát, cím szerint kell átadnod.

Ha azt szeretnéd, hogy egy függvényargumentum mindig cím szerint adódjon át, a függvénydefinícióban az argumentum neve elé tegyél egy & jelet.


function fgv_extrakkal(&$string)
{
    $string .= 'és a szükséges plusssz.';
}
$str = 'Ez egy karakterfüzér, ';
fgv_extrakkal($str);
echo $str;    // kiírja, hogy 'Ez egy karakterfüzér, és a szükséges plusssz.'

      

Ha egy olyan függvénynél szeretnél paramétert cím szerint átadni, amely ezt nem teszi meg alapból, akkor a függvényhívásban az argumentum neve elé kell tenned egy & jelet:


function foo ($bar)
{
    $bar .= 'makk';
}
$str = 'Bikk';
foo ($str);
echo $str;    // kiírja, hogy 'Bikk'
foo (&$str);
echo $str;    // kiírja, hogy 'Bikkmakk'

      

Argumentumok kezdőértékei

Bármely függvény skalár-argumentumainak megadhatsz kezdőértéket a C++ szintaxisnak megfelelően:


function kavet_csinal ($tipus = "cappucino")
{
    return "Csinálok egy pohár " . $tipus . "t.\n";
}
echo kavet_csinal ();
echo kavet_csinal ("espresso");

      

A fenti kód kimenete:

Csinálok egy pohár cappucinot.
Csinálok egy pohár espressot.
     

A kezdőértéknek konstans kifejezésnek kell lennie, nem lehet pl. változó vagy objektum.

Figyelj rá, hogy amikor kezdőértékeket definiálsz, a kezdőértékkel rendelkező paraméterek más argumentumoktól jobbra helyezkedjenek el; különben a dolgok nem úgy mennek majd, ahogy várnád [hanem úgy, ahogy írtad :)]. Nézd meg a következő kódot:


function joghurtot_keszit ($type = "acidophilus", $flavour)
{
    return "Készítek egy köcsög $flavour ízű $type-t.\n";
}
 
echo joghurtot_keszit ("eper");   // nem úgy működik, mint szeretnéd !?!

      

A fenti példa kimenete:

Warning: Missing argument 2 in call to joghurtot_keszit() in 
/usr/local/etc/httpd/htdocs/phptest/functest.php on line 41
Készítek egy köcsög ízű eper-t.
     

Most hasonlítsd össze az alábbival:


function joghurtot_keszit ($flavour, $type = "acidophilus")
{
    return "Készítek egy köcsög $flavour ízű $type-ot.\n";
}
 
echo joghurtot_keszit ("eper");   // ez már jó

      

A fenti példa kimenete:

Készítek egy eper ízű acidophilus-t.
     

Megjegyzés: [Azért vannak kiskapuk... Az argumentumokat adjuk át egy asszociatív tömbben! Az alapértékeket pedig egy másik tömbben. Ezután vegyük végig az alapértékeket tartalmazó tömb elemeit. Ha nem definiáltak a kapott tömbben, akor írjuk felül az alapértékeket tartalmazó tömb megfelelő elemével. Így bármelyik argumentum elhagyható, sőt még annyit is nyerünk a dolgon, hogy nem kell megjegyeznünk a paraméterek sorrendjét. (forrás: egy bő lére eresztett amerikai PHP 3 könyv)]

Változó hosszúságú argumentumlista

A PHP 4 támogatja a változó hosszúságú argumentumlistát a felhasználók által definiált függvényekben. Valóban nagyon egyszerű, a func_num_args(), func_get_arg() és a func_get_args() függvényekkel.

Semmilyen különleges szintakszist nem igényel és az argumentumlista lehet explicit módon adott és viselkedhet úgy is, mint egy normál függvény.