Funciones de Usuario
PHP ofrece gran cantidad de funciones predefinidas, pero también puedes crear tus propias funciones. Estas son bloques de código que puedes llamar cuando quieras, perfectas para desarrollar funcionalidades y reutilizarlas sin tener que repetir el código.
Definición de funciones
Una función de usuario se crea con la palabra reservada function. Para usarla, simplemente llamas su nombre. Aquí un esquema básico:
<?php
function hiperlink() {
// Código de la función
}
hiperlink(); // Llama a la función
?>
Nota: Los paréntesis () son obligatorios aunque no haya parámetros. PHP no distingue mayúsculas de minúsculas en nombres de funciones (Hiperlink = hiperlink), pero sé consistente: en mensajes de error PHP muestra los nombres en minúsculas.
Ejemplo:
<?php
function holaMundo() {
echo "Hola, mundo!\n";
}
holaMundo(); // Imprime: Hola, mundo!
?>
Cualquier código PHP válido puede ir dentro de una función.
¿Cuándo llamar a una función?
Puedes llamar a una función antes o después de definirla, porque PHP lee todas las definiciones al cargar el script:
<?php
holaMundo(); // Funciona
function holaMundo() {
echo "Hola, mundo!\n";
}
?>
También puedes definir funciones en un archivo separado y cargarlo con include o require:
<?php
require 'funciones.php';
holaMundo();
?>
Cuidado con funciones condicionales:
<?php
$buenHumor = false;
if ($buenHumor) {
function holaMundo() {
echo "Hola, mundo!\n";
}
}
holaMundo(); // Error fatal: Call to undefined function holaMundo()
?>
Si la condición no se cumple, la función no se define. Otro error habitual es definir la misma función dos veces (por ejemplo, incluyendo el mismo archivo más de una vez; para evitarlo, usa require_once en lugar de require).
Funciones con parámetros
Las funciones pueden recibir parámetros que serán utilizados por el código que contienen. Los parámetros pueden pasarse por valor (copia del dato) o por referencia (modifica el original):
<?php
$msg = "Cómo estás?";
function holaMundoPorValor(string $msg): string {
$msg = "Hola, mundo! " . $msg;
echo "$msg\n";
return $msg;
}
function holaMundoPorReferencia(string &$msg): void {
$msg = "Hola, mundo! " . $msg;
echo "$msg\n";
}
holaMundoPorValor($msg); // Imprime: Hola, mundo! Cómo estás?
echo "$msg\n"; // Imprime: Cómo estás?
holaMundoPorReferencia($msg); // Imprime: Hola, mundo! Cómo estás?
echo "$msg\n"; // Imprime: Hola, mundo! Cómo estás?
?>
Cuando llamas a la función holaMundoPorValor($msg), el mensaje se modifica solo dentro de la función, pero la variable $msg fuera de la función permanece igual. Esto sucede porque PHP pasa los valores por copia, no por referencia, a menos que se indique lo contrario.
En cambio, al pasar por referencia (&$msg), la variable $msg se modifica dentro de la función y persiste fuera de ella.
Nota: Desde PHP 7 puedes declarar el tipo de los parámetros (string, int, array…) y el tipo de retorno (: string, : void…). No es obligatorio, pero se recomienda: el motor PHP valida los tipos y los errores se detectan antes.
Nota: Si el parámetro viene de una fuente externa, fuerza el tipo con casting antes de pasarlo:
<?php
$msg = 123; // De un formulario
holaMundoPorValor((string)$msg);
?>
Parámetros por defecto
Puedes definir valores por defecto para parámetros:
<?php
function saludar(string $msg = "Hola, ¿cómo estás?"): string {
return "Saludo: $msg\n";
}
echo saludar(); // Imprime: Saludo: Hola, ¿cómo estás?
echo saludar("Hasta luego"); // Imprime: Saludo: Hasta luego
?>
Nota: Los parámetros con valor por defecto deben ir siempre al final de la lista de parámetros:
<?php
function ejemplo(string $obligatorio, string $opcional = "valor"): string {
return "$obligatorio, $opcional\n";
}
?>
Retornando valores
Usa return para devolver un valor desde la función. El código después de return no se ejecuta:
<?php
function unirMensaje(string $msg): string {
const SALUDO = "Hola, mundo!";
return SALUDO . " " . $msg;
}
$mensaje = unirMensaje("Cómo estás?");
echo "$mensaje\n"; // Imprime: Hola, mundo! Cómo estás?
?>
Ámbito de variables
Las variables dentro de una función son locales y no afectan las variables externas, salvo si usas global o parámetros por referencia:
<?php
$contador = 0;
function incrementar(): void {
$contador = 1; // Variable local
echo "Dentro: $contador\n";
}
incrementar(); // Imprime: Dentro: 1
echo "Fuera: $contador\n"; // Imprime: Fuera: 0
?>
Para acceder a variables externas, usa global (con cuidado):
<?php
function incrementarGlobal(): void {
global $contador;
$contador++;
}
?>
Recapitulación
- Una función se define con
function nombre() { }y se llama connombre(). Los paréntesis son obligatorios. - PHP carga todas las definiciones al iniciar el script, por lo que puedes llamar a una función antes de definirla, salvo que esté dentro de un condicional.
- Los parámetros se pasan por valor (copia) por defecto; usa
¶ pasar por referencia y modificar la variable original. - Declara tipos de parámetros y tipo de retorno (
: string,: void…) para que PHP valide los datos automáticamente. - Los parámetros con valor por defecto van siempre al final de la lista.
- Las variables dentro de una función son locales. Evita
global: es mejor pasar los datos como parámetros. - Para reutilizar funciones en varios archivos, defínelas en un archivo aparte y cárgalo con
require_once.
En la próxima lección: debug y manejo de errores en PHP: cómo localizar y gestionar errores en tus scripts.