'عمومی', 'specialist' => 'متخصص', 'expert' => 'فوق تخصص', 'subspecialistplus' => 'فلوشیپ', ]; /** * ترتیب شرط‌ها معنادار است: * - «فوق تخصص» خودش شامل «تخصص» است، پس باید پیش از آن بررسی شود؛ * - بسیاری از عنوان‌ها هم «تخصص …» دارند و هم «دکترای حرفه‌ای پزشکی»، * و داشتنِ تخصص بر مدرک عمومی مقدم است، پس general آخر می‌آید. * * عنوان ناشناخته → null؛ هرگز حدس نزن، چون درجهٔ غلط از نبودِ درجه بدتر است. */ public static function fromTitle(?string $title): ?string { if ($title === null || trim($title) === '') { return null; } if (str_contains($title, 'فلوشیپ')) { return 'subspecialistplus'; } if (str_contains($title, 'فوق تخصص') || str_contains($title, 'فوق‌تخصص')) { return 'expert'; } if (str_contains($title, 'تخصص') || str_contains($title, 'متخصص')) { return 'specialist'; } if (str_contains($title, 'دکترای حرفه‌ای') || str_contains($title, 'عموم')) { return 'general'; } return null; } public static function label(?string $degree): string { return self::LABELS[$degree] ?? var_export($degree, true); } public static function isValid(?string $degree): bool { return $degree !== null && in_array($degree, Doctor::DEGREES, true); } }