이 프로젝트의 유지 관리는 Tidelift를 통해 지원됩니다.
첫째, 주로 SplEnum
PHP에 통합되어 있지 않으므로 확장 기능을 별도로 설치해야 합니다.
클래스 상수 대신 열거형을 사용하면 다음과 같은 이점이 있습니다.
열거형을 매개변수 유형으로 사용할 수 있습니다. function setAction(Action $action) {
열거형을 반환 유형으로 사용할 수 있습니다. function getAction() : Action {
메소드(예: format
, parse
등)를 사용하여 열거형을 풍부하게 할 수 있습니다.
열거형을 확장하여 새 값을 추가할 수 있습니다(이를 방지하려면 열거형을 final
만드세요).
가능한 모든 값의 목록을 얻을 수 있습니다(아래 참조).
이 Enum 클래스는 클래스 상수를 대체하기 위한 것이 아니라 의미가 있는 경우에만 사용됩니다.
composer require myclabs/php-enum
use MyCLabsEnumEnum;/** * Action enum * * @extends Enum<Action::*> */final class Action은 Enum을 확장합니다. {개인 const VIEW = '보기';개인 const EDIT = '편집'; }
$action = Action::VIEW();// 또는 동적 키 사용:$action = Action::$key();// 또는 동적 값 사용:$action = Action::from($value);/ / 또는$action = new Action($value);
보시다시피 정적 메서드는 열거형 값에 대한 빠른 액세스를 제공하기 위해 자동으로 구현됩니다.
클래스 상수를 사용하는 것보다 한 가지 장점은 열거형을 매개변수 유형으로 사용할 수 있다는 것입니다.
함수 setAction(Action $action) {// ...}
__construct()
생성자는 값이 열거형에 존재하는지 확인합니다.
__toString()
echo $myValue
하면 enum 값(상수 값)이 표시됩니다.
getValue()
열거형의 현재 값을 반환합니다.
getKey()
Enum의 현재 값의 키를 반환합니다.
equals()
enum 인스턴스가 같은지 테스트합니다(enum 값이 같으면 true
반환하고, 그렇지 않으면 false
반환합니다).
정적 방법:
from()
Enum 인스턴스를 생성하고 해당 값이 enum에 존재하는지 확인합니다.
toArray()
메서드 가능한 모든 값을 배열로 반환합니다(키의 상수 이름, 값의 상수 값).
keys()
Enum 클래스에 있는 모든 상수의 이름(키)을 반환합니다.
values()
모든 Enum 상수(키의 상수 이름, 값의 Enum 인스턴스)의 Enum 클래스 인스턴스를 반환합니다.
isValid()
테스트된 값이 열거형 세트에서 유효한지 확인합니다.
isValidKey()
테스트된 키가 열거형 세트에서 유효한지 확인합니다.
assertValidValue()
열거형 세트에서 값이 유효한지 확인하고, 그렇지 않으면 예외를 발생시킵니다.
search()
검색된 값에 대한 반환 키
최종 클래스 Action은 Enum을 확장합니다. {개인 const VIEW = '보기';개인 const EDIT = '편집'; }// 정적 메소드:$action = Action::VIEW();$action = Action::EDIT();
정적 메서드 도우미는 __callStatic()
사용하여 구현됩니다.
IDE 자동 완성에 관심이 있다면 정적 메서드를 직접 구현할 수 있습니다.
최종 클래스 Action은 Enum을 확장합니다. {private const VIEW = 'view';/** * @return Action */public static function VIEW() {return new Action(self::VIEW); } }
또는 phpdoc를 사용할 수 있습니다(예를 들어 PhpStorm에서 지원됨).
/** * @method static Action VIEW() * @method static Action EDIT() */final class Action은 Enum을 확장합니다. {개인 const VIEW = '보기';개인 const EDIT = '편집'; }
네이티브 열거형은 버전 8.1에서 PHP에 도착했습니다: https://www.php.net/enumerations
프로젝트가 PHP 8.1 이상을 실행 중이거나 라이브러리에 최소 요구 사항이 있는 경우 이 라이브러리 대신 이를 사용해야 합니다.
myclabs/php-enum
에서 마이그레이션할 때 권장되는 방식으로 사용했다면 노력은 적어야 합니다.
개인 상수
최종 수업
메서드가 재정의되지 않음
마이그레이션 변경사항:
클래스 정의는 다음에서 변경되어야 합니다.
/** * @method static Action VIEW() * @method static Action EDIT() */final class Action은 Enum을 확장합니다. {개인 const VIEW = '보기';개인 const EDIT = '편집'; }
에게
열거형 작업: string{case VIEW = 'view';case EDIT = 'edit'; }
클래스가 유형으로 사용된 모든 위치는 계속 작동합니다.
사용법과 필요한 변경 사항:
작업 | myclabs/php-열거 | 네이티브 열거형 |
---|---|---|
인스턴스 획득은 다음에서 변경됩니다. | $enumCase = Action::VIEW() | $enumCase = Action::VIEW |
지원되는 값에서 열거형 만들기 | $enumCase = new Action('view') | $enumCase = Action::from('view') |
enum 인스턴스의 지원 값을 가져옵니다. | $enumCase->getValue() | $enumCase->value |
두 열거형 인스턴스 비교 | $enumCase1 == $enumCase2 또는 $enumCase1->equals($enumCase2) | $enumCase1 === $enumCase2 |
열거형 인스턴스의 키/이름을 가져옵니다. | $enumCase->getKey() | $enumCase->name |
열거형의 가능한 모든 인스턴스 목록을 가져옵니다. | Action::values() | Action::cases() |
이름으로 매핑된 열거형의 가능한 인스턴스 맵을 가져옵니다. | Action::values() | array_combine(array_map(fn($case) => $case->name, Action::cases()), Action::cases()) 또는 (new ReflectionEnum(Action::class))->getConstants() |
열거형의 가능한 모든 이름 목록을 가져옵니다. | Action::keys() | array_map(fn($case) => $case->name, Action::cases()) |
열거형의 가능한 모든 지원 값 목록을 가져옵니다. | Action::toArray() | array_map(fn($case) => $case->value, Action::cases()) |
이름으로 매핑된 열거형의 가능한 지원 값 맵을 가져옵니다. | Action::toArray() | array_combine(array_map(fn($case) => $case->name, Action::cases()), array_map(fn($case) => $case->value, Action::cases())) 또는 array_map(fn($case) => $case->value, (new ReflectionEnum(Action::class))->getConstants())) |
PHP 8.1+ 네이티브 열거형
교리 열거형 매핑
Symfony ParamConverter 통합
PHPStan 통합