Функции
PHP Manual

Аргументи на функция

Към функциите може да бъде предавана информация посредством списък с аргументи под формата на разделен със запетаи списък с изрази.

PHP поддържа предаването на аргументи по стойност (по подразбиране), по референция, както и стойности по подразбиране. Списъци с аргументи с променлива дължина също се поддържат, вж. документацията на функциите func_num_args(), func_get_arg() и func_get_args() за повече информация.

Example #1 Предаване на масиви към функции

<?php
function takes_array($input)
{
    echo 
"$input[0] + $input[1] = "$input[0]+$input[1];
}
?>

Предаване на аргументи по референция

По подразбиране аргументите се предават на функциите по стойност (така че ако стойността на даден аргумент бъде променена вътре във функцията, това няма да промени съответната променлива извън нея). За да се разреши на функция да променя аргументите си, те трябва да бъдат предадени по референция.

За да бъде предаван винаги по референция, съответният аргумент на функция трябва да бъде предшестван от амперсанд (&) пред името си в дефиницията на функцията:

Example #2 Предаване на функционални параметри по референция

<?php
function add_some_extra(&$string)
{
    
$string .= 'и още нещо.';
}
$str 'Това е низ ';
add_some_extra($str);
echo 
$str;    // извежда 'Това е низ и още нещо.'
?>

Стойности на аргументи по подразбиране

Функция може да дефинира стойности по подразбиране за скаларни аргументи, както в C++, така:

Example #3 Употреба на параметри по подразбиране във функции

<?php
function makecoffee($type "капучино")
{
    return 
"Приготвяне на чаша $type.\n";
}
echo 
makecoffee();
echo 
makecoffee(null);
echo 
makecoffee("еспресо");
?>

Изходът от горния откъс е:


Приготвяне на чаша капучино.
Приготвяне на чаша .
Приготвяне на чаша еспресо.

PHP позволява също и употребата на масиви и на специалния тип NULL за стойности по подразбиране, например:

Example #4 Употреба на не-скаларни типове за стойности по подразбиране

<?php
function makecoffee($types = array("капучино"), $coffeeMaker NULL)
{
    
$device is_null($coffeeMaker) ? "на ръка" $coffeeMaker;
    return 
"Приготвяне на чаша ".join(", "$types)." $device.\n";
}
echo 
makecoffee();
echo 
makecoffee(array("капучино""лаваца"), "с машина за кафе");
?>

Стойността по подразбиране трябва да бъде константа, а не (например) променлива, член на клас или извикване на функция.

Забележете, че когато се използват аргументи по подразбиране, те трябва да бъдат от дясната страна, а тези без стойности по подразбиране - от лявата; в противен случай нещата може да не работят според очакванията. Разгледайте следния откъс:

Example #5 Неправилна употреба на подразбиращи се аргументи

<?php
function makeyogurt($type "кисело"$flavour)
{
    return 
"Сервиране на чаша $type $flavour.\n";
}
 
echo 
makeyogurt("мляко");   // няма да работи според очакваното
?>

Изходът от горния пример е:


Warning: Missing argument 2 in call to makeyogurt() in
/usr/local/etc/httpd/htdocs/phptest/functest.html on line 41
Сервиране на мляко.

Сега сравнете горното с това:

Example #6 Правилна употреба на подразбиращи се аргументи

<?php
function makeyogurt($flavour$type "кисело")
{
    return 
"Сервиране на чаша $type $flavour.\n";
}
 
echo 
makeyogurt("мляко");   // работи както трябва
?>

Изходът от този пример е:


Сервиране на чаша кисело мляко.

Забележка: От PHP 5 нататък стойностите по подразбиране могат да бъдат предавани по референция.

Променлива дължина на списъка с аргументи

От PHP 4 нататък се поддържа списък с аргументи с променлива дължина в потребителски-дефинираните функции. Това е лесно, посредством функциите func_num_args(), func_get_arg() и func_get_args().

Не се изисква специален синтаксис и списъкът с аргументи може да бъде все така изрично предоставян с дефинициите на функциите и те ще работят както трябва.


Функции
PHP Manual