Definiendo funciones
Declarar funciones, indicar tipos para parámetros y valores de retorno, y pasar por valor frente a pasar por referencia.
2 min de lectura
Las funciones en PHP se declaran con la palabra clave function y pueden declarar opcionalmente tipos tanto para sus parámetros como para su valor de retorno.
Una función básica
<?php
function greet($name) {
return "Hello, $name!";
}
echo greet("Amara");return envía un valor de vuelta al llamador y sale inmediatamente de la función — cualquier código después de return en esa misma ruta de ejecución nunca se ejecuta.
Type hints (indicaciones de tipo)
<?php
function calculateTotal(float $price, int $quantity): float {
return $price * $quantity;
}
echo calculateTotal(9.99, 3);Añadir float, int, string, bool, array o un nombre de clase antes de un parámetro le indica a PHP (y a quien lea la firma) qué tipo se espera; : float después de los paréntesis declara el tipo de retorno. Sin declare(strict_types=1) (cubierto en la lección sobre conversión de tipos), PHP seguirá intentando forzar un argumento no coincidente al tipo declarado en lugar de rechazarlo directamente.
Valores de parámetro por defecto
<?php
function greet($name, $greeting = "Hello") {
return "$greeting, $name!";
}
echo greet("Amara"); // "Hello, Amara!"
echo greet("Amara", "Welcome"); // "Welcome, Amara!"Un parámetro con un valor por defecto se vuelve opcional — omítelo en la llamada y PHP usará el valor por defecto. Cualquier parámetro con un valor por defecto debe ir después de todos los parámetros sin uno, en la lista de parámetros.
Tipos anulables (nullable) y tipos unión
<?php
function findUser(?int $id): ?string {
if ($id === null) {
return null;
}
return "User #$id";
}
function formatValue(int|string $value): string {
return (string) $value;
}Un ? antes de un tipo (?int) significa "este tipo, o null". Un | entre tipos (int|string) declara un tipo unión — el parámetro o valor de retorno puede ser cualquiera de ellos. Ambos se añadieron en versiones relativamente recientes de PHP y hoy son estándar en el código moderno con tipado.
Pasar por valor frente a pasar por referencia
<?php
function double($number) {
$number *= 2;
}
function doubleByRef(&$number) {
$number *= 2;
}
$x = 5;
double($x);
echo $x; // still 5 — a copy was modified inside the function
doubleByRef($x);
echo $x; // 10 — the original variable was modifiedPor defecto, PHP pasa los valores escalares (números, strings, booleanos) por valor — la función recibe una copia, y los cambios dentro de ella no afectan a la variable del llamador. Anteponer & a un parámetro lo pasa por referencia en su lugar, permitiendo que la función modifique directamente la variable original del llamador. Los arrays y los objetos se comportan de manera un poco distinta por debajo (los objetos siempre se manejan mediante una referencia interna al mismo objeto, incluso sin &), algo que retoman las lecciones de programación orientada a objetos.
Pon a prueba lo que acabas de aprender
4 preguntas rápidas. Respóndelas todas correctamente para desbloquear la siguiente lección.
Puedes hacer el cuestionario sin una cuenta — iniciar sesión solo hace que tu resultado cuente para tu progreso.