PHP में Enumerations: एक मील का पत्थर सवाल
\n\nअगर आपने कभी Google पर "PHP enum" सर्च किया है, तो आप जानते हैं: PHP 8.1 आने से पहले यह एक बड़ी चुनौती थी। डेवलपर्स constants, abstract classes और tricky traits के साथ जुगाड़ करते थे। Stack Overflow पर "PHP में Enum कैसे बनाएं?" जैसे सवालों के जवाब सैकड़ों upvotes पाते थे।
\n\nलेकिन अब समय बदल गया है। PHP 8.1 से, Enum (Enumerations) भाषा का मूल हिस्सा बन गए हैं। यह सिर्फ syntactic sugar नहीं है - यह साफ, सुरक्षित और self-documenting कोड लिखने का एक शक्तिशाली उपकरण है।
\n\nइस लेख में हम सब कुछ कवर करेंगे: क्लासिक constants से लेकर आधुनिक Enum तक, वास्तविक उदाहरणों और best practices के साथ। चलिए शुरू करते हैं!
\n\nसमस्या: PHP 8.1 से पहले डेवलपर्स कैसे काम करते थे?
\n\nNative enumerations आने से पहले, हमारे पास दो मुख्य तरीके थे: class constants और abstract classes के साथ "जुगाड़"। दोनों को समझते हैं।
\n\nतरीका #1: Class Constants (सबसे लोकप्रिय)
\n\nclass OrderStatus {\n const PENDING = 'pending';\n const PROCESSING = 'processing';\n const SHIPPED = 'shipped';\n const DELIVERED = 'delivered';\n const CANCELLED = 'cancelled';\n}\n\n// उपयोग\n$status = OrderStatus::PENDING;\nif ($status === OrderStatus::PROCESSING) {\n echo 'ऑर्डर प्रोसेस हो रहा है';\n}\n\nफायदे: सरल, समझने में आसान, IDE में autocompletion।
\nनुकसान: typing नहीं है। कोई भी 'invalid_status' स्ट्रिंग पास कर सकता है - और PHP कोई त्रुटि नहीं देगा।
\n\nतरीका #2: Abstract Class + Private Constructor
\n\nएडवांस डेवलपर्स आगे जाते थे:
\n\nabstract class OrderStatus {\n private function __construct() {}\n \n public static function pending(): self {\n return new class extends OrderStatus {};\n }\n public static function processing(): self {\n return new class extends OrderStatus {};\n }\n // ... बाकी स्टेटस\n}\n\nयह काम करता था, लेकिन कोड फूल जाता था। और यह अभी भी एक emulation था, भाषा का मूल समर्थन नहीं।
\n\nPHP 8.1 में Native Enum: एक क्रांति
\n\nPHP 8.1 के आने के साथ, "PHP enum" की समस्या हमेशा के लिए हल हो गई। अब enumerations पूर्ण प्रकार (types) हैं जो:
\n\n- \n
- सख्त typing को सपोर्ट करते हैं \n
- बिल्ट-इन मेथड्स (
name,value,cases()) रखते हैं \n - Interfaces को implement कर सकते हैं \n
- Traits को सपोर्ट करते हैं \n
matchऔरswitchके साथ एकीकृत होते हैं \n
PHP में Enum का बेसिक सिंटैक्स
\n\nenum OrderStatus {\n case Pending;\n case Processing;\n case Shipped;\n case Delivered;\n case Cancelled;\n}\n\n// उपयोग\n$status = OrderStatus::Pending;\necho $status->name; // 'Pending'\n\nबहुत सरल और सुंदर। लेकिन यह तो बस शुरुआत है।
\n\nEnum के प्रकार: Pure और Backed
\n\nPHP दो प्रकार के enumerations सपोर्ट करता है:
\n\n1. Pure Enum (शुद्ध enumerations)
\nबिना किसी विशिष्ट मान के। फ्लैग, स्टेटस, टाइप के लिए आदर्श।
\n\nenum UserRole {\n case Admin;\n case Editor;\n case Viewer;\n}\n\nfunction checkAccess(UserRole $role): bool {\n return match($role) {\n UserRole::Admin => true,\n UserRole::Editor => true,\n UserRole::Viewer => false,\n };\n}\n\n2. Backed Enum (मान सहित enumerations)
\nजब enum को किसी विशिष्ट मान (स्ट्रिंग या पूर्णांक) से जोड़ना हो।
\n\nenum OrderStatus: string {\n case Pending = 'pending';\n case Processing = 'processing';\n case Shipped = 'shipped';\n case Delivered = 'delivered';\n case Cancelled = 'cancelled';\n}\n\n// मान प्राप्त करें\n$status = OrderStatus::Shipped;\necho $status->value; // 'shipped'\n\n// मान से बनाएं\n$