PHP 열거형 소개
8883 단어 webdevphpprogramming
8.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::$order
은 string
의 반환 유형을 가지며 해당 변수의 값만 반환합니다. 보시다시피 제 클래스__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
Reference
이 문제에 관하여(PHP 열거형 소개), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/maymeow/introduction-to-php-enums-c9f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)