L'informazione può essere passata alle funzioni tramite la lista degli argomenti, che sono liste di espressioni delimitati dalla virgola. Gli argomenti sono valutati da sinistra a destra.
PHP supporta il passaggio di argomenti per valore (comportamento di default), il passaggio per riferimento, e i valori di default degli argomenti. Le liste di argomenti di lunghezza varabile sono ugualmente supportate.
Example #1 Passaggio di array a funzioni
<?php
function prende_array($input)
{
echo "$input[0] + $input[1] = ", $input[0]+$input[1];
}
?>
Di default, gli argomenti della funzione sono passati per valore (così se cambiate il valore dell'argomento all'interno della funzione , esso non cambierà fuori della funzione). Se volete permettere ad una funzione di modificare i suoi argomenti, dovete passarli per riferimento.
Se volete che una argomento sia passato sempre per riferimento ad una funzione, dovete anteporre un ampersand (&) al nome dell'argomento nella definizione della funzione:
Example #2 Passaggio di parametri per riferimento
<?php
function aggiungi_qualcosa(&$string)
{
$string .= 'e qualche altra cosa.';
}
$str = 'Questa è una stringa, ';
aggiungi_qualcosa($str);
echo $str; // l'output sarà 'Questa è una stringa, e qualche altra cosa.'
?>
Una funzione può definire valori predefiniti in stile C++ per argomenti scalari come segue:
Example #3 Utilizzo dei parametri default in una funzione
<?php
function fare_il_caffe($tipo = "cappuccino")
{
return "Sto facendo una tazza di $tipo.\n";
}
echo fare_il_caffe();
echo fare_il_caffe(null);
echo fare_il_caffe("espresso");
?>
Il precedente esempio visualizzerà:
Sto facendo una tazza di cappuccino. Sto facendo una tazza di. Sto facendo una tazza di espresso.
Anche il PHP permette di utilizzare array ed il tipo speciale NULL
come valore di default, ad esempio:
Example #4 Utilizzo di tipi non scalari come valori di default
<?php
function makecoffee($types = array("cappuccino"), $coffeeMaker = NULL)
{
$device = is_null($coffeeMaker) ? "hands" : $coffeeMaker;
return "Making a cup of ".join(", ", $types)." with $device.\n";
}
echo makecoffee();
echo makecoffee(array("cappuccino", "lavazza"), "teapot");
?>
Il valore predefinito deve essere un'espressione costante, non (per esempio) una variabile, un membro di classe o una chiamata ad una funzione.
Da notare che quando vengono usati argomenti predefiniti, qualunque argomento predefinito dovrebbe essere a destra degli argomenti non-predefiniti; diversamente, le cose non funzioneranno come ci si aspetti. Si consideri il seguente frammento di codice:
Example #5 Utilizzo incorretto degli argomenti di default
<?php
function fare_lo_yogurt($tipo = "yogurt", $gusto)
{
return "Fare una vaschetta di $tipo a $gusto.\n";
}
echo fare_lo_yogurt("fragola"); // non funziona come si aspetta
?>
Il precedente esempio visualizzerà:
Warning: Missing argument 2 in call to fare_lo_yogurt() in /usr/local/etc/httpd/htdocs/phptest/functest.html on line 41 Fare una vaschetta di fragola a.
Ora, si confronti il codice di sopra con questo:
Example #6 Utilizzo corretto degli argomenti di default
<?php
function fare_lo_yogurt($gusto, $tipo = "yogurt")
{
return "Fare una vaschetta di $tipo a $gusto.\n";
}
echo fare_lo_yogurt("fragola"); // funziona come si aspetta
?>
Il precedente esempio visualizzerà:
Fare una vaschetta di yogurt a fragola.
Nota: Da PHP 5, i parametri che sono passati per riferimento possono avere un valore di default.
PHP 4 ha il supporto per le liste di argomenti a lunghezza variabile nelle funzioni definite dall'utente. Questo è implementato utilizzando il token ... in PHP 5.6 e successivi, e usando le funzioni func_num_args(), func_get_arg(), e func_get_args() in PHP 5.5 e precedenti.
In PHP 5.6 e successivi, le liste dei parametri possono includere il token ... per denotare che la funzione accetta un numero variabile di parametri. I parametri saranno passati nella variabile data come un array; per esempio:
Example #7 Utilizzo di ... per accedere ai parametri variabili
<?php
function sum(...$numbers) {
$acc = 0;
foreach ($numbers as $n) {
$acc += $n;
}
return $acc;
}
echo sum(1, 2, 3, 4);
?>
Il precedente esempio visualizzerà:
10
Si può anche usare ... quando vengono chiamate funzioni per spacchettare un array o una variabile Traversable o literal all'interno della lista degli argomenti:
Example #8 Uso di ... per fornire parametri
<?php
function add($a, $b) {
return $a + $b;
}
echo add(...[1, 2])."\n";
$a = [1, 2];
echo add(...$a);
?>
Il precedente esempio visualizzerà:
3 3
Si possono specificare parametri con posizione normale prima del token .... In questo caso, solo i parametri seguenti che non corrispondono ad un parametro posizionale saranno aggiunti all'array generato da ....
È anche possibile aggiungere un type hint prima del token .... Se questo è presente, allora tutti i parametri catturati da ... devono essere oggetti della classe suggerita.
Example #9 Parametri variabili con Type hint
<?php
function total_intervals($unit, DateInterval ...$intervals) {
$time = 0;
foreach ($intervals as $interval) {
$time += $interval->$unit;
}
return $time;
}
$a = new DateInterval('P1D');
$b = new DateInterval('P2D');
echo total_intervals('d', $a, $b).' days';
// Questo fallirà, dato che null non è un oggetto DateInterval.
echo total_intervals('d', null);
?>
Il precedente esempio visualizzerà:
3 days Catchable fatal error: Argument 2 passed to total_intervals() must be an instance of DateInterval, null given, called in - on line 14 and defined in - on line 2
Infine, si possono anche passare parametri variabili per riferimento anteponendo ... con un ampersand (&).
Non è richiesta una sintassi speciale per annotare che una funzione è variadica; tuttavia per accedere ai parametri della funzione bisogna usare func_num_args(), func_get_arg() e func_get_args().
Il primo esempio di sopra sarebbe implementato come segue in PHP 5.5 e precedenti:
Example #10 Accesso ai parametri variabili in PHP 5.5 e precedenti
<?php
function sum() {
$acc = 0;
foreach (func_get_args() as $n) {
$acc += $n;
}
return $acc;
}
echo sum(1, 2, 3, 4);
?>
Il precedente esempio visualizzerà:
10