19th Ave New York, NY 95822, USA
+1 916-875-2235
+1 916-875-2235

Declaración de tipo de parámetro en una función PHP

Las funciones de PHP aceptan la declaración de tipo en los parámetros que reciben. Desde la versión 5 de PHP, si la función recibe un tipo no aceptado, retornará un Fatal Error; en cambio, desde la versión 7 de PHP, si esto sucede lanzará una excepción TypeError.

Tipos aceptados

Tipo Descripción Versión de PHP mínima
nombre de clase/interfaz El parámetro debe ser una instanceof del nombre de la clase o interfaz
dada.
PHP 5.0.0
self El parámetro debe ser una instanceof de la misma clase donde está definido el método. Esto solamente se puede utilizar en clases y métodos de instancia. PHP 5.0.0
array El parámetro debe ser un array. PHP 5.1.0
callable El parámetro debe ser un callable válido. PHP 5.4.0
bool El parámetro debe ser un valor de tipo boolean. PHP 7.0.0
float El parámetro debe ser un número de tipo float. PHP 7.0.0
int El parámetro debe ser un valor de tipo integer. PHP 7.0.0
string El parámetro debe ser un string. PHP 7.0.0

Ejemplo

EL siguiente ejemplo muestra de una forma sencilla como declarar el tipo requerido a cada parámetro que recibe la función.

	function concatenar(int $value1, string $value2){
		return $value1.$value2;
	}

	var_dump(concatenar(3, 'casas')); // string(6) "3casas" 

Si los datos introducidos no coinciden, pero estamos con tipificación débil, no retornará un error.

	function concatenar(int $value1, string $value2){
		return $value1.$value2;
	}

	var_dump(concatenar(true, 'casas')); // string(6) "1casas" 	

En cambio, si estamos con tipificación estricta, retornará el error: Fatal error: Uncaught TypeError: Argument 1 passed to concatenar() must be of the type int, bool given, called in…

	declare(strict_types=1);
	function concatenar(int $value1, string $value2){
		return $value1.$value2;
	}

	var_dump(concatenar(true, 'casas')); // Fatal error: Uncaught TypeError: Argument 1 passed to concatenar() must be of the type int, bool given, called in...
	

Escribe una respuesta