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?
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: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 claseEvent
. Esto debería prevenir errores relacionados con la seguridad de tipos al acceder al array.