Forum und email
Argumenty funkcí

Argumenty funkcí

Informace mohou být do funkcí předávány přes seznam argumentů, což je seznam proměnných a/nebo konstant oddělených čárkou.

PHP podporuje předávání argumentů hodnotou (implicitní), předávání odkazem, a implicitní hodnoty argumentů. Proměnná délka seznamu argumentů je podporována pouze v PHP 4 a pozdějších; viz Seznam argumentů proměnné délky a reference funkcí func_num_args(), func_get_arg(), a func_get_args(). Podobný efekt může být v PHP 3 dosažen předáním pole argumentů do funkce:

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

Předávání argumentů odkazem

Implicitně jsou argumenty funkcí předávány hodnotou (takže když změníte hodnotu argumentu ve funkci, nezmění se mimo funkci). Pokud chcete umožnit funkci modifikovat své argumenty, musíte je předávat odkazem.

Pokud chcete, aby byl argument do funkce předáván vždy odkazem, můžete před název argumentu v definici funkce předřadit ampersand (&):

function add_some_extra(&$string)
{
    $string .= 'a něco navíc.';
}
$str = 'Toto je řetězec ';
add_some_extra($str);
echo $str;    // vypíše 'Toto je řetězec a něco navíc.'

Implicitní hodnoty argumentů

Funkce může ve stylu C++ definovat implicitní hodnoty pro skalární argumenty takto:

function makecoffee ($type = "cappucina")
{
    return "Dělám šálek $type.\n";
}
echo makecoffee ();
echo makecoffee ("espressa");

Výstupem výše uvedeného kódu je:

Dělám šálek cappucina.
Dělám šálek espressa.

Implicitní hodnota musí být konstantní výraz, ne (například) proměnná nebo položka třídy.

Uvědomte si, že když používáte implicitní argumenty, jakékoli implicitní hodnoty by měly být na pravé staně neimplicitního argumentu; jinak to nebude pracovat podle očekávání. Uvažujme tento kus kódu:

function makeyogurt ($type = "acidophilus", $flavour)
{
    return "Dělám kelímek jogurtu $type $flavour.\n";
}

echo makeyogurt ("malina");   // nebude pracovat podle očekávání

Výstupem uvedeného příkladu bude:

Warning: Missing argument 2 in call to makeyogurt() in 
/usr/local/etc/httpd/htdocs/php3test/functest.html on line 41
Dělám kelímek jogurtu malina.

A nyní to porovnejme s tímto:

function makeyogurt ($flavour, $type = "acidophilus")
{
    return "Dělám kelímek jogurtu $type $flavour.\n";
}

echo makeyogurt ("malina");   // pracuje podle očekávání

Příklad vytiskne:

Dělám kelímek jogurtu acidophilus malina.

Seznam argumentů proměnné délky

PHP 4 má podporu pro seznam argumentů proměnné délky v uživatelských funkcích. Je to opravdu jednoduché, použitím funkcí func_num_args(), func_get_arg(), a func_get_args().

Není třeba žádná zvláštní syntaxe, seznam argumentů může být stále explicitně poskytován definicemi funkcí a bude se chovat jako normálně.