16. Funciones con tipado definido

Hay ocasiones en las que queramos especificar el tipo de variable que le vamos a pasar a una función, para ello pondremos delante de la variable pasada como parámetro el tipo de dato que deseamos recibir. También si ponemos al principio la función declare(strict_types = 1); obligará a introducir los tipos de valores que la función pide, y evitamos posibles errores futuros.

Ejm

  declare(strict_types = 1);

  function sumarEnteros(int $entero1, int $entero2){
    return $entero1 + $entero2;
  }

  $resultado = sumarEnteros(2,5);
  $resultado2 = sumarEnteros(2,5.4);
  $resultado2 = sumarEnteros(2,"Hola Mundo");

  echo $resultado;
  echo "<br />";
  echo $resultado2;
  echo "<br />";
  // echo $resultado3;  DARÁ UN ERROR

 

Podemos hacer que además el tipo de dato devuelto sea el que le propongamos a la función, para ello después de los paréntesis ponemos dos puntos (:) seguidos del tipo de dato que deseamos devuelva.

Ejm

  declare(strict_types = 1);

  function sumarEnteros(int $entero1, int $entero2) : int
  {
    return ($entero1 + $entero2)/2;
  }

  $resultado = sumarEnteros(2,5);
  $resultado2 = sumarEnteros(2,5.4);
  $resultado2 = sumarEnteros(2,"Hola Mundo");

  echo $resultado;
  echo "<br />";
  echo $resultado2;
  echo "<br />";
 
  // Esta sintaxis devolverá un error ya que devuelve un tipo de dato float y estamos pidiendo que devuelva un entero

 

También podemos hacer que la función nos devuelva un valor entero o un valor flotante, para ello separamos el tipo de dato que queremos devuelva con el símbolo (|), de la siguiente forma.

Ejm

  declare(strict_types = 1);

  function sumarEnteros(int $entero1, int $entero2) : int | float
  {
    return ($entero1 + $entero2)/2;
  }

  $resultado = sumarEnteros(2, 5);
  $resultado2 = sumarEnteros(2, 6);

  echo $resultado;
  echo "<br />";
  echo $resultado2;
  echo "<br />";

 

Tipos de datos que podemos especificar

Los tipos de datos que podemos especificar son:

  • int
  • float
  • string
  • bool
  • array
  • object
  • null