## Funciones definidas por el usuario

Una función puede ser definida empleando una sintaxis como la siguiente:

Ejemplo #1 Seudocódigo para demostrar el uso de funciones

`<?php
function foo($arg_1, $arg_2, /* ..., */ $arg_n)
{
echo "Función de ejemplo.\n";
return $valor_devuelto;
}
?>`

Cualquier código PHP válido puede aparecer dentro de una función, incluso otras funciones y definiciones de clases.

Los nombres de las funciones siguen las mismas reglas que las demás etiquetas de PHP. Un nombre de función válido comienza con una letra o guión bajo, seguido de cualquier número de letras, números o guiones bajos. Como expresión regular se expresaría así: `^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$`.

Sugerencia

Vea también Guía de entorno de usuario para nombres.

No es necesario definir una función antes de que sea referenciada, excepto cuando esta esté condicionalmente definida como se muestra en los dos ejemplos de abajo.

Cuando una función está definida de una forma condicional como en los dos ejemplos siguientes, sus definiciones deben ser procesadas antes de ser llamadas.

Ejemplo #2 Funciones condicionales

`<?php
$hacer_algo = true;
/* No podemos llamar a foo() desde aquí
ya que no existe aún,
pero podemos llamar a bar() */
bar();
if ($hacer_algo) {
function foo()
{
echo "No existo hasta que la ejecución del programa llegue hasta mí.\n";
}
}
/* Ahora podemos llamar de forma segura a foo()
ya que $hacer_algo se evaluó como verdadero */
if ($hacer_algo) foo();
function bar()
{
echo "Existo desde el momento inmediato que comenzó el programa.\n";
}
?>`

Ejemplo #3 Funciones dentro de funciones

`<?php
function foo()
{
function bar()
{
echo "No existo hasta que se llame a foo().\n";
}
}
/* No podemos llamar aún a bar()
ya que no existe. */
foo();
/* Ahora podemos llamar a bar(),
el procesamiento de foo()
la ha hecho accesible. */
bar();
?>`

Todas las funciones y clases de PHP tienen ámbito global. Se pueden llamar desde fuera de una función incluso si fueron definidas dentro, y viceversa.

PHP no admite la sobrecarga de funciones, ni es posible 'desdefinir' ni redefinir funciones previamente declaradas.

> Nota: Los nombres de las fuciones son insensibles a mayúsculas-minúsculas, aunque es una buena idea llamar a las funciones tal y como aparecen en sus declaraciones.

Las funciones admiten un número variable de argumentos y argumentos predeterminados. Véanse también las referencias de funciones para func_num_args(), func_get_arg(), y func_get_args() para más información.

En PHP es posible llamar a funciones recursivas.

Ejemplo #4 Funciones recursivas

`<?php
function recursividad($a)
{
if ($a < 20) {
echo "$a\n";
recursividad($a + 1);
}
}
?>`

> Nota: Las llamadas a funciones/métodos recursivos con más de 100-200 niveles de recursividad pueden agotar la pila y ocasionar la finalización del script en curso. Especialmente, las recurisvidades infinitas están consideradas un error de programación.