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:

  1. Al momento de escribir su nombre se recomienda usar el formato camelCase, en nuestro ejemplo anterior functionName.
  2. Deben devolver un valor usando la instrucción return y no imprimir directamente con echo, print u otras.
  3. Los parámetros son opcionales; simplemente puede no tenerlos.
  4. Pueden ser llamadas antes de su definición, a menos que estén definidas condicionalmente.
  5. 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!"

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 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 ... (operador de splat):

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.

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 de 3 (escrito como 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: imprime y calcula. 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";
}
  • 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 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);
}

Tips de Laravel y PHP

Te enviaré únicamente temas profesionales de programación cada domingo.

    Puedes cancelar en cualquier momento.