What about to call static toArray method using static::toArray() instead of self::toArray()?
In this way it is possible to extend the base class and use a data source different from class' constants list. I know it is a corner scenario, but doing so you are able to use DB as a dynamic data source.