es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

PHPDoc & Psalm: Anotar un “array de clases”

En mi código, creé un EventFactory de la siguiente manera:

private array $events = [
    'post_created' => PostCreatedEvent::class,
    'exercise_executed' => ExerciseExecutedEvent::class,
];

public function fromTopicAndData(string $topic, array $data) : Event
{
    if (! array_key_exists($topic, $this->events)) {
        throw new Exception('Tema inválido');
    }

    $event = ($this->events)[$topic];
    return $event::createFromData($data);
}

Tanto PostCreatedEvent como ExerciseExecutedEvent extienden una clase abstracta llamada Event.

¿Me puedes decir si hay alguna forma de anotar el array de manera que no se produzca un error en Psalm?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, puedes anotar el array usando un tipo que especifique que sus claves son strings y sus valores son subclases de la clase abstracta Event. Una forma posible de hacer esto es:

    /**
     * @var array<string,></string,><event>>
     */
    private array $events = [
        'post_created' => PostCreatedEvent::class,
        'exercise_executed' => ExerciseExecutedEvent::class,
    ];
    

    Esto le indica a Psalm que las claves del array $events son strings, y los valores son nombres de clases que representan subclases instanciables de la clase Event. Esto debería prevenir errores relacionados con la seguridad de tipos al acceder al array.

Comments are closed.