Blog de Gonzalo

UNION TYPES

Una de las novedades de php 8 son los union types que permite especificar varios tipos para un argumento y el retorno de una función. Los union types son una colección de dos o más tipos cuando se especifica el valor de ese argumento o el tipo de retorno de la función.
Veamos un ejemplo:

function setNumber (int|float $number)
{
    $this->number = $number;
}

function getNumber (): int|float
{
  return $this->number
}

En el ejemplo anterior podemos ver que el parámetro que se pasa al método setNumber puede ser de tipo integer o de tipo float. Y también podemos ver que en el método getNumber el tipo que devuelve el método puede ser de tipo integer o de tipo float.
Pero hay algunas limitaciones:
  • El tipo de void no podría formar parte de una unión, ya que void significa que una función no devuelve ningún valor.
  • El tipo null sólo se admite en los tipos de unión, pero su uso como tipo independiente no está permitido.
  • La notación de tipo null (?T) también está permitida, es decir, T|null, pero no se nos permite incluir la notación ?T en los tipos de unión (?T1|T2 no está permitida y debemos usar T1|T2|null en su lugar).
  • Como muchas funciones (es decir, strpos(), strstr(), substr(), etc.) incluyen false entre los posibles tipos de retorno, el false pseudo-tipo también está soportado.
  • El tipo de void no podría formar parte de una unión, ya que void significa que una función no devuelve ningún valor.
  • El tipo null sólo se admite en los tipos de unión, pero su uso como tipo independiente no está permitido.
  • La notación de tipo null (?T) también está permitida, es decir, T|null, pero no se nos permite incluir la notación ?T en los tipos de unión (?T1|T2 no está permitida y debemos usar T1|T2|null en su lugar).
  • Como muchas funciones (es decir, strpos(), strstr(), substr(), etc.) incluyen false entre los posibles tipos de retorno, el false pseudo-tipo también está soportado.