PHP 열거형 소개

8883 단어 webdevphpprogramming
PHP8.1는 마침내 C#와 같은 다른 프로그래밍 언어에서 알 수 있는 열거형을 제공합니다. 제 생각에는 새로운 PHP 버전과 함께 제공되는 최고의 기능 중 하나입니다.

열거형



이전 enum은 나와 같은 정적 클래스를 사용했거나 enum 작성기 패키지를 설치했을 수 있습니다. 열거형은 열거형 이름 뒤에 오는 enum 대신 단어 class로 정의할 수 있습니다. 값은 값 이름 뒤에 정의된 마녀 단어case입니다. 다음과 같이 정의된 열거형은 각 값에 대해 1부터 순서대로 반환합니다.

enum DocumentType
{
    case order; //1
    case invoice; //2
    case orderItem; //3
}


그런 다음 사용은 분명합니다

DocumentType::order //enum(DocumentType::order)


각 케이스의 reutrn 유형은 enum(DocumentType::<case-name>) 입니다. 사례 가치를 얻으려면 전화에 value 키워드를 추가해야 합니다.

DocumentType::order->value //1


다음과 같이 값에서 enum을 얻을 수도 있습니다.

DocumentType::from(2) //enum(DocumentType::order)


열거형에 존재하지 않는 것을 from()에 전달하려고 하면 \ValueError로 쉽게 처리할 수 있는 try catch가 발생합니다.

지원되는 열거형



기본적으로 표준 열거형과 동일하지만 예를 들어 원하는 각 열거형 값(속성) 값 및 유형에 대해 정의할 수 있는 "백업 열거형"이라는 것이 있습니다.

enum DocumentType: string
{
    case order = 'application/disclosure.document.order';
    case invoice = 'application/disclosure.document.invoice';
    case orderItem = 'application/disclosure.document.order-item';
}


사용은 일반 enum과 동일하지만 값 반환으로 주문 번호의 instad에서 정의한 문자열을 얻습니다. 예를 들어:

DocumentType::order->value //application/disclosure.document.order


다른 클래스와 함께 사용



내가 이전 열거형에 대해 말했듯이 나는 하나의 벨로우즈와 같은 일부 정의된 속성이 있는 정적 클래스를 사용했습니다.

class ImportDocumentType
{
    public static string $order = "application/disclosure.document.order";

    public static string $orderItem = "application/disclosure.document.order-item";

    public static string $invoice = "application/disclosure.document.invoice";

    public static function get(string $property): string
    {
        if (property_exists(self::class, $property)) {
            return self::$$property;
        } else {
            throw new \InvalidArgumentException("Property $property does not exist in class " . self::class);
        }
    }
}


보시다시피 훨씬 더 많은 텍스트이며 이상적이지는 않습니다(하지만 예를 들면 충분합니다). 수업보다 벨로우즈로 사용할 수 있습니다. (더 간단하기 때문에 인터페이스를 사용합니다)

interface Document
{
    protected string $type;

    public function __construct(string $type);

    public function getType(): string;
}


호출ImportDocumentType::$orderstring의 반환 유형을 가지며 해당 변수의 값만 반환합니다. 보시다시피 제 클래스__construct()는 이상적이지 않은 모든 문자열을 허용합니다. 거기에 무엇이든 넣을 수 있기 때문입니다. getType() simmilary 함수는 거기에 넣은 문자열만 반환합니다. 그냥 ImportDocumentType 일 필요는 없습니다.

유형이 지정된 속성(PHP뿐만 아니라 다른 언어에서도)을 사용하는 것을 정말 좋아하는 사람으로서, 코드가 훨씬 더 깨끗해 보이고 함수를 호출할 때 반환되는 결과를 여전히 알고 있기 때문에 저는 다음과 같이 말하는 사람들에게 동의할 수 있습니다. PHP 코드가 엉망입니다. 그랬고 나는 그것을 위해 PHP를 거의 버렸지만 새 버전에서는 훨씬 좋습니다.

내 클래스로 돌아가서 enum을 사용하면 다음과 같이 보일 수 있습니다.

interface Document
{
    protected DocumentType $type;

    public function __construct(DocumentType $type);

    public function getType(): DocumentType;
}


훨씬 낫지 않나요? 그리고 $type__construct()DocumentType만 될 수 있고 다른 것은 없다는 것을 알고 있습니다. 유사하게 getType()에 전화를 걸고 DocumentType만 받을 수 있다는 것을 알고 있습니다.

결국



보시다시피 열거형을 사용하는 것은 쉽습니다(함수를 정의할 필요가 없습니다). 열거형을 사용하면 위의 예에서와 같이 변수가 다른 문자열이 아닌 열거형만 될 수 있습니다.

PHP의 새로운 추가 사항이 마음에 드십니까? 나는 그것들을 사랑하고 무엇이 우리에게 새로운 버전을 가져다 줄지 기대됩니다.

My Blog에 원래 게시됨

사진 제공: Crissy Jarvis on Unsplash
  • GitHub: https://github.com/MayMeow
  • 개발자:
  • 해시노드: https://hashnode.com/@maymeow
  • 코파이: https://ko-fi.com/maymeow
  • 좋은 웹페이지 즐겨찾기