sprintf('%s-Funktionen, Klassen und Registrierungen', $profileLabel), self::MIRRORS => sprintf('Fingerabdrücke nachgebauter %s-Funktionen', $profileLabel), default => null, }; } /** @param list $problems */ public function __construct( public readonly string $key, public readonly array $problems, public readonly bool $skipped = false, public readonly ?string $label = null ) { } public function green(): bool { return ! $this->skipped && $this->problems === []; } public function label(): string { return $this->label ?? $this->key; } /** @return array{key: string, problems: list, skipped: bool, label?: string} */ public function toArray(): array { $data = ['key' => $this->key, 'problems' => $this->problems, 'skipped' => $this->skipped]; return $this->label === null ? $data : $data + ['label' => $this->label]; } public static function fromArray(mixed $data): ?self { if (! is_array($data) || ! is_string($data['key'] ?? null) || ! is_array($data['problems'] ?? null)) { return null; } return new self( $data['key'], array_values(array_filter($data['problems'], 'is_string')), ($data['skipped'] ?? false) === true, is_string($data['label'] ?? null) ? $data['label'] : null ); } }