Me pregunto por qué no es posible proporcionar una implementación __toString para enum.
IDE dice "Enum puede no incluir '__toString'". Sin embargo, fue lo primero en lo que pensé una vez que creé enum. Anteriormente, usaba Value Objects para encapsular cadenas en mi código, que utilizaba la conversión de cadenas cuando era necesario. Ahora me gustaría migrarlos a enumeraciones, pero se resisten.
#[Immutable] enum SaveKlinesFromApiQueue: string { case DEFAULT = 'save_klines_from_api_queue'; case PRIORITY = 'save_klines_from_api_priority_queue'; public function __toString(): string { return $this->value; } }Como menciona Chris, los métodos mágicos no están permitidos.
Para los 2 casos de uso más comunes (?):
Para obtener el valor de cadena de uno solo, puede usar ->value .
Si desea los valores de cadena de todos ellos, simplemente agregue un bucle en un método:
public static function strings(): array { $strings = []; foreach(self::cases() as $case) { $strings[] = $case->value; } return $strings; }