php-como-crear-funciones-en-php

Cómo crear funciones en PHP

  • 3 min

Una función es un bloque de código con nombre que realiza una tarea y puede reutilizarse.

En programación hay un principio sagrado: DRY (Don’t Repeat Yourself). Si te ves copiando y pegando el mismo bloque de código en dos sitios distintos, algo estás haciendo mal.

Las funciones nos permiten empaquetar una lógica, ponerle un nombre y reutilizarla tantas veces como queramos. Son como pequeños sub-programas dentro de tu programa.

Anatomía de una función

Para definir una función usamos la palabra clave function. Pero como estamos en un curso profesional, vamos a aplicar todo lo aprendido sobre tipos estrictos.

// Estructura:
// function nombre(Tipo $argumento): TipoRetorno { ... }

function calcularDescuento(float $precio, int $porcentaje): float {
    $descuento = $precio * ($porcentaje / 100);
    return $precio - $descuento;
}
Copied!

Argumentos y return

  • Argumentos: Son los datos que la función necesita para trabajar (inputs).
  • Return: Es el resultado que la función devuelve al código principal (output).

Intenta que cada función tenga una responsabilidad clara. Evita funciones que calculen, guarden en base de datos Y envíen un email todo a la vez. Divide y vencerás.

return vs echo

Un error clásico de principiante es poner un echo dentro de la función.

  • Mal: La función imprime el resultado. (Te limita, no puedes usar ese resultado para otras cuentas).
  • Bien: La función hace return. Tú decides fuera si lo imprimes, lo guardas o lo envías.

El tipo void

Si tu función no devuelve nada (por ejemplo, solo guarda un log en un archivo), debes indicar que su retorno es : void.

function guardarLog(string $mensaje): void {
    file_put_contents('log.txt', $mensaje . "\n", FILE_APPEND);
    // No hay return
}
Copied!

Valores por defecto

A veces, un argumento suele tener un valor común el 90% de las veces. Para no tener que escribirlo siempre, podemos definir un valor por defecto.

// Si no me pasas el $iva, asumo que es 21
function calcularTotal(float $precio, int $iva = 21): float {
    return $precio * (1 + ($iva / 100));
}

// Uso:
echo calcularTotal(100);      // Usa 21% (Resultado: 121)
echo calcularTotal(100, 10);  // Usa 10% (Resultado: 110)
Copied!

Los argumentos con valores por defecto deben ir siempre al final de la lista de argumentos.

Parámetros nombrados

Imagina una función con muchos argumentos opcionales:

function configurarCookie(
    string $nombre, 
    string $valor, 
    int $vida = 3600, 
    string $path = '/', 
    bool $segura = false
): void {
    // Implementación de la función
}
Copied!

Antiguamente, si querías cambiar solo el último argumento ($segura), tenías que rellenar todos los anteriores aunque fueran los valores por defecto: configurarCookie('user', 'luis', 3600, '/', true);

¿Qué significa ese true al final? Nadie lo sabe al leerlo. Es código opaco.

La Solución Moderna: Puedes llamar a la función usando el nombre del argumento. El orden ya no importa y puedes saltarte los que tienen valores por defecto.

configurarCookie(
    nombre: 'user', 
    valor: 'luis', 
    segura: true
);
Copied!

Fíjate: nos hemos saltado $vida y $path. PHP usa sus valores por defecto automáticamente. Además, segura: true explica la intención mejor que un booleano suelto.

Como el nombre del parámetro forma parte de la llamada, cambiarlo puede romper a quien use argumentos nombrados.

Tipos “nullable” (?)

A veces quieres permitir que un argumento sea un valor válido O null. Usamos el signo de interrogación ? antes del tipo.

function saludar(?string $nombre): string {
    if ($nombre === null) {
        return "Hola, Invitado";
    }
    return "Hola, $nombre";
}

saludar("Luis"); // Ok
saludar(null);   // Ok
Copied!