Funciones
PHP Manual

Argumentos de funciones

La información puede ser pasada a las funciones mediante la lista de argumentos, la cual es una lista de expresiones delimitadas por comas. Los argumentos son evaluados de izquierda a derecha.

PHP soporta argumentos pasados por valor (por defecto), pasados por referencia, y valores de argumentos predeterminados. Las Listas de argumentos de longitud variable también están soportadas.

Ejemplo #1 Pasar arrays a funciones

<?php
function tomar_array($entrada)
{
    echo 
"$entrada[0] + $entrada[1] = ".$entrada[0]+$entrada[1];
}
?>

Hacer que los argumentos sean pasados por referencia

Por defecto, los argumentos de las funciones son pasados por valor (por lo que si el valor del argumento dentro de la función se cambia, no se cambia fuera de la función). Para permitir a una función modificar sus argumentos, éstos deben pasarse por referencia.

Para hacer que un argumento a una función sea siempre pasado por referencia hay que poner delante del nombre del argumento el signo 'ampersand' (&) en la definición de la función:

Ejemplo #2 Pasar parámetros de una función por referencia

<?php
function añadir_algo(&$cadena)
{
    
$cadena .= 'y algo más.';
}
$cad 'Esto es una cadena, ';
añadir_algo($cad);
echo 
$cad;    // imprime 'Esto es una cadena, y algo más.'
?>

Valores de argumentos predeterminados

Una función puede definir valores predeterminados al estilo C++ para argumentos escalares como sigue:

Ejemplo #3 Uso de parámetros predeterminados en funciones

<?php
function hacercafé($tipo "capuchino")
{
    return 
"Hacer una taza de $tipo.\n";
}
echo 
hacercafé();
echo 
hacercafé(null);
echo 
hacercafé("espresso");
?>

El resultado del ejemplo sería:

Hacer una taza de capuchino.
Hacer una taza de .
Hacer una taza de espresso.

PHP también permite el uso de arrays y del tipo especial NULL como valores predeterminados, por ejemplo:

Ejemplo #4 Usar tipos no escalares como valores predeterminados

<?php
function hacercafé($tipos = array("capuchino"), $fabricanteCafé NULL)
{
    
$aparato is_null($fabricanteCafé) ? "las manos" $fabricanteCafé;
    return 
"Hacer una taza de ".join(", "$tipos)." con $aparato.\n";
}
echo 
hacercafé();
echo 
hacercafé(array("capuchino""lavazza"), "una tetera");
?>

El valor predeterminado debe ser una expresión constante, no (por ejemplo) una variable, un miembro de una clase o una llamada a una función.

Observe que cuando se usan argumentos predeterminados, cualquiera de ellos debería estar a la derecha de los argumentos no predeterminados; si no, las cosas no funcionarán como se esperaba. Considere el siguiente trozo de código:

Ejemplo #5 Uso incorrecto de argumentos predeterminados en una función

<?php
function haceryogur($tipo "acidófilo"$sabor)
{
    return 
"Hacer un tazón de yogur $tipo de $sabor.\n";
}

echo 
haceryogur("frambuesa");   // no funcionará como se esperaba
?>

El resultado del ejemplo sería:

Warning: Missing argument 2 in call to haceryogur() in
/usr/local/etc/httpd/htdocs/phptest/functest.html on line 41
Hacer un tazón de yogur frambuesa de .

Ahora compare el ejemplo de arriba con este:

Ejemplo #6 Uso correcto de argumentos predeterminados en una función

<?php
function haceryogur($sabor$tipo "acidófilo")
{
    return 
"Hacer un tazón de yogur $tipo de $sabor.\n";
}

echo 
haceryogur("frambuesa");   // funciona como se esperaba
?>

El resultado del ejemplo sería:

Hacer un tazón de yogur acidófilo de frambuensa.

Nota: A partir de PHP 5, los argumentos que son pasados por referencia pueden tener un valor predeterminado.

Listas de argumentos de longitud variable

PHP tiene soporte para listas de argumentos de longitud variable en funciones definidas por el usuario. Esto se implementa utilizando el token ... en PHP 5.6 y posteriores, y utilizando las funciones func_num_args(), func_get_arg(), y func_get_args() en PHP 5.5 y anteriores.

... en PHP 5.6+

En PHP 5.6 y posteriores, las listas de argumentos pueden incluir el token ... para denotar que la función acepta un número variable de argumentos. Los argumentos serán pasados a la variable dada como un aryay, por ejemplo:

Ejemplo #7 Usando ... para acceder a argumentos variables

<?php
function sum(...$números) {
    
$acc 0;
    foreach (
$números as $n) {
        
$acc += $n;
    }
    return 
$acc;
}

echo 
sum(1234);
?>

El resultado del ejemplo sería:

10

También se puede emplear ... al llamar a funciones para convertir un array o variable Traversable o literal en una lista de argumentos:

Ejemplo #8 Usar ... para proporcionar argumentos

<?php
function add($a$b) {
    return 
$a $b;
}

echo 
add(...[12])."\n";

$a = [12];
echo 
add(...$a);
?>

El resultado del ejemplo sería:

3
3

Se puede especifcar argumentos posicionales normales antes del token .... En este caso, solamente los argumentos al final que no coincidan con un argumento posicional serán añadidos al array generado por ....

También es posible añadir un tipo implicado antes del token .... Si está presente, todos los argumentos capturados por ... deben ser objetos de la clase implicada.

Ejemplo #9 Argumentos variables de tipo implicado

<?php
function total_intervals($unitDateInterval ...$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';

// Esto fallará, debido a que  null no es un objeto de DateInterval.
echo total_intervals('d'null);
?>

El resultado del ejemplo sería:

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

Por último, también es pueden pasar argumentos variables por referencia prefijando ... con el signo (&).

Versiones antiguas de PHP

No se requiere una sintaxis especial para señalar que una función es varíadica; sin embargo, para acceder a los argumentos de la función se debe usar func_num_args(), func_get_arg() y func_get_args().

El primer ejemplo de antes se implementaría en PHP 5.5 y anteriores como sigue:

Ejemplo #10 Acceder a argumentos variables en PHP 5.5 y anteriores

<?php
function sum() {
    
$acc 0;
    foreach (
func_get_args() as $n) {
        
$acc += $n;
    }
    return 
$acc;
}

echo 
sum(1234);
?>

El resultado del ejemplo sería:

10


Funciones
PHP Manual