Componente TypeInfo en Symfony

DALL-E
Solucionex
23
Ene 25

En Symfony 7.2 se ha introducido un componente llamado TypeInfo, con la intención de reemplazar al componente PropertyInfo. El cual se usa para obtener información de propiedades de clases PHP. El principal inconveniente de PropertyInfo es que solo obtiene información de las propiedades, nada de métodos, sus argumentos o el tipo que va a devolver. Principal razón por la que se ha creado el componente TypeInfo.

Instalamos el componente

composer require symfony/type-info

Hay 2 maneras de usar el componente

El componente nos ofrece un objeto Type que vamos a utilizar para determinar de lo que quiera que queremos leer sus tipos. Podemos crear nuevas instancias de tipo mediante los métodos estáticos de la clase Type

use Symfony\Component\TypeInfo\Type;

Type::int();
Type::list(Type::bool());

También podemos usar un TypeResolver al que le podemos pasar una reflection o un string con el nombre del tipo

use Symfony\Component\TypeInfo\TypeResolver\TypeResolver;

$typeResolver = TypeResolver::create();
$typeResolver->resolve('bool');
$typeResolver->resolve(new \ReflectionProperty(ClassName::class, 'propertyName'));

En cualquier caso vamos a obtener una instancia de Type

Si además instalamos el paquete phpdoc-parser mediante el comando

composer require phpstan/phpdoc-parser

Podremos resolver tipos que han sido definidos con PHPDocs

use Symfony\Component\TypeInfo\TypeResolver\TypeResolver;

class Foo
{
    public function __construct(
        /** @var string[] $list */
        public array $list,
    ) {
    }
}

$typeResolver = TypeResolver::create();
$typeResolver->resolve(new \ReflectionProperty(Foo::class, 'list'));

Esto nos devolverá un Type que indicará una colección con int como clave y string como el tipo de los valores,

Una vez que tenemos una instancia de Type ya podemos consultar sus propiedades

$type->getBaseType();
$type->isIdentifiedBy(TypeIdentifier::INT);
$type->getCollectionKeyType();
$type->isNullable();
symfony