Funciones en PHP explicadas de forma simple
04-07-2025 | PHP function 4 min
El concepto matemático dice: "Una función es una caja negra que recibe una entrada, hace un proceso y devuelve una salida". En programación, es igual: una función es un bloque de código que realiza una tarea específica, y puede recibir parámetros de entrada y devolver un resultado como salida.
- Entrada: 5.
- Proceso: Sumar 10.
- Salida: 15.
function sumTen($number) {
return $number + 10;
}
echo sumTen(5); // Imprime 15
Ejemplos de funciones en PHP
Veamos inicialmente la estructura correcta de una función en PHP:
function functionName($param1, $param2, ... $paramN) {
// ...
return $result;
}
Reglas principales:
- Al momento de escribir su nombre se recomienda usar el formato camelCase, en nuestro ejemplo anterior
functionName
. - Deben devolver un valor usando la instrucción
return
y no imprimir directamente conecho
,print
u otras. - Los parámetros son opcionales; simplemente puede no tenerlos.
- Pueden ser llamadas antes de su definición, a menos que estén definidas condicionalmente.
- No deben tener múltiples tareas; cada función debe realizar una única tarea específica.
Ejemplo básico
function greet($name) {
return "Hello, $name!";
}
echo greet('Graaan'); // Imprime "Hello, Graaan!"
Aquí, la función greet
toma a $name
y devuelve un saludo personalizado. Es un ejemplo simple que muestra cómo funcionan y su estructura básica.
Valores por defecto
function greet($name = 'Sr./Sra. Guest') {
return "Hello, $name!";
}
echo greet(); // Imprime "Hello, Sr./Sra. Guest!"
Como puedes ver, si un parámetro tiene un valor por defecto, no es necesario pasarlo al llamar a la función.
Tipos de parámetros y retorno
Desde PHP 7, puedes especificar tipos para los parámetros y para el valor de retorno.
Esto es profesional, y su ventaja es que el intérprete de PHP validará que los valores pasados y retornados coincidan con los tipos especificados, esto ayuda muchísimo a evitar errores.
Ejemplo 1:
function greet(string $name): string {
return "Hello, $name!";
}
echo greet('Graaan'); // Imprime "Hello, Graaan!"
Ejemplo 2:
function add(int $numA, int $numB): int {
return $numA + $numB;
}
echo add(3, 9); // Imprime 12
Número variable de argumentos
Puedes definir una función que acepte un número variable de argumentos usando los tres puntos ...
llamado también operador de descomposición o splat operator:
function sumAll(...$numbers): int {
return array_sum($numbers);
}
echo sumAll(3, 6, 9); // Imprime 18
Aclaración:
- Un parámetro es la variable que se define en la función, por ejemplo
$number
,$name
,$numA
, etc. - Un argumento es el valor que se pasa a la función cuando se llama, por ejemplo
3
,6
,9
,'Graaan'
, etc.
Por eso decimos Número variable de argumentos, porque hay varios valores dentro del mismo parámetro
$numbers
.
Otro tema curiosos es que las funciones pueden ser llamadas antes de su definición, a menos que existan condiciones que lo impidan.
Funciona:
echo multiply(3, 4); // Imprime 12
function multiply($numA, $numB) {
return $numA * $numB;
}
Si hay condiciones, no funciona:
echo multiply(3, 4); // Uncaught Error: Call to undefined function multiply()
$active = false; // o true
if ($active) {
function multiply($numA, $numB) {
return $numA * $numB;
}
}
Cuando existe una condición, la función no se define hasta que la ejecución del programa llegue a esa línea. En estos casos, por ejemplo, echo multiply(3, 4)
debe ir después del bloque condicional para que funcione, además de que se debe cumplir la condición, es decir, $active
debe ser true
.
Ejemplo básico con recursividad
Hay un ejemplo clásico de función recursiva que calcula el factorial de un número, que se ve mucho en matemáticas y en ejercicios universitarios:
function factorial($num) {
if ($num <= 1) {
return 1;
} else {
return $num * factorial($num - 1);
}
}
echo factorial(3); // Imprime 6 (3 * 2 * 1)
Un factorial es el producto (multiplicación) de todos los números enteros positivos desde 1 hasta el número indicado. Por ejemplo, el factorial del número 3 es 3 * 2 * 1 = 6
.
Veamos otro ejemplo sencillo de recursividad que imprime los números pares desde un valor inicial hasta 30:
function printEvens($num) {
if ($num > 30) {
return;
}
if ($num % 2 == 0) {
echo "$num \n";
}
printEvens($num + 1);
}
printEvens(20); // Imprime 20, 22, 24, 26, 28, 30
Pero te había dicho que las funciones deben hacer una sola cosa, y este ejemplo hace dos cosas: imprimir y calcular. Así que no es un buen ejemplo de función. Pero te lo quería mostrar de manera sencilla.
Veamos cómo se haría correctamente:
function isEven($num): bool {
return $num % 2 == 0;
}
function getEvens(int $num, int $limit = 30): array {
if ($num > $limit) {
return [];
}
if (isEven($num)) {
return array_merge([$num], getEvens($num + 1, $limit));
}
return getEvens($num + 1, $limit);
}
$evens = getEvens(20);
foreach ($evens as $even) {
echo "$even \n";
}
// Imprime 20, 22, 24, 26, 28, 30
isEven
solo verifica si un número es par.getEvens
obtiene todos los números pares desde un número inicial hasta un límite (30 por defecto).
Incluso se puede simplificar la función getEvens
usando el operador ternario:
function getEvens(int $num, int $limit = 30): array {
if ($num > $limit) {
return [];
}
return isEven($num)
? array_merge([$num], getEvens($num + 1, $limit))
: getEvens($num + 1, $limit);
}