PHP में Enums: अव्यवस्था से व्यवस्था की ओर
\n\nक्या आपने कभी ऐसा कोड लिखा है जिसमें ऑर्डर का स्टेटस 'new', 'paid', 'shipped' जैसे स्ट्रिंग के रूप में स्टोर किया गया हो? और फिर 'shippped' जैसी टाइपिंग गलती से बग पकड़े हों? या फिर getOrderByStatus('Active') फंक्शन में भेजा हो, जबकि वहां 'active' की उम्मीद थी? यह सब जाना-पहचाना लगता है? तो यह लेख आपके लिए ही है।
लंबे समय तक, PHP में मूल (native) एनुम (enums) नहीं थे। डेवलपर्स को तरह-तरह के जुगाड़ करने पड़ते थे: क्लास कॉन्स्टेंट, ऐरे, या फिर डमी कमेंट्स का इस्तेमाल करना पड़ता था। लेकिन PHP 8.1 के आने के बाद सब कुछ बदल गया। अब हमारे पास पूरी तरह से काम करने वाले PHP एनुम हैं — एक शक्तिशाली टूल जो कोड को साफ, सुरक्षित और समझने में आसान बनाता है।
\n\nइस गाइड में हम PHP enums को शुरू से अंत तक कवर करेंगे: बेसिक सिंटैक्स से लेकर एडवांस्ड तकनीकों तक। आप सीखेंगे कि एनुम कैसे बनाएं, उनके साथ कैसे काम करें, उनकी तुलना कैसे करें और रियल प्रोजेक्ट्स में कैसे इस्तेमाल करें। चलिए शुरू करते हैं!
\n\nPHP में Enum क्या है?
\n\nEnum (enumeration) एक डेटा टाइप है जो पूर्वनिर्धारित वैल्यू के एक सेट तक सीमित होता है। सीधे शब्दों में: आप संभावित विकल्पों की एक सूची परिभाषित करते हैं, और एक वेरिएबल उनमें से केवल एक ही वैल्यू ले सकता है। कोई रैंडम स्ट्रिंग नहीं, कोई अनचेक की गई वैल्यू नहीं।
\n\nPHP 8.1 में, एनुम को खास क्लास के रूप में लागू किया गया है। हर वैल्यू एक ऑब्जेक्ट है, न कि सिर्फ एक कॉन्स्टेंट। यह कई फायदे देता है:
\n\n- \n
- सख्त टाइपिंग — कंपाइलर
'pending'कोStatus::Pendingके बजाय स्वीकार नहीं करेगा \n - सुरक्षा — कोई आकस्मिक टाइपिंग गलती नहीं \n
- पठनीयता — कोड खुद ही अपनी बात कहता है \n
- IDE सपोर्ट — ऑटो-कम्प्लीशन बेहतरीन काम करता है \n
PHP में Enum का सिंटैक्स
\n\nPHP में एनुम बनाना आसान है। enum कीवर्ड का उपयोग करें:
<?php\n\nenum OrderStatus\n{\n case New;\n case Pending;\n case Processing;\n case Shipped;\n case Delivered;\n case Cancelled;\n}\n\n\nअब हम OrderStatus को एक टाइप के रूप में उपयोग कर सकते हैं:
<?php\n\nfunction updateOrderStatus(OrderStatus $status): void\n{\n // स्टेटस की प्रोसेसिंग\n}\n\n// वैल्यू भेजें:\nupdateOrderStatus(OrderStatus::Shipped);\n\n\nअगर आप 'shipped' स्ट्रिंग भेजने की कोशिश करेंगे, तो PHP टाइप एरर देगा। यही है PHP enum का जादू।
बैक्ड एनुम (Backed Enums)
\n\nअक्सर हमें हर केस को एक विशिष्ट वैल्यू से जोड़ने की ज़रूरत होती है — जैसे डेटाबेस के लिए नंबर या स्ट्रिंग। PHP में इसे backed enum कहते हैं:
\n\n<?php\n\nenum OrderStatus: string\n{\n case New = 'new';\n case Pending = 'pending';\n case Processing = 'processing';\n case Shipped = 'shipped';\n case Delivered = 'delivered';\n case Cancelled = 'cancelled';\n}\n\n\nअब हर केस का एक स्ट्रिंग वैल्यू है। आप इसे value प्रॉपर्टी से प्राप्त कर सकते हैं:
<?php\n\n$status = OrderStatus::Shipped;\necho $status->value; // 'shipped'\n\n\nऔर वैल्यू से वापस केस बना सकते हैं:
\n\n<?php\n\n$status = OrderStatus::from('shipped');\necho $status->name; // 'Shipped'\n\n\nअगर वैल्यू नहीं मिलती है तो from() मेथड एक एक्सेप्शन फेंकेगा। अगर null चाहिए तो tryFrom() का उपयोग करें।
Enum में मेथड्स: एनुम के अंदर व्यवहार
\n\nPHP enum की एक शानदार विशेषता यह है कि आप एनुम के अंदर ही मेथड्स जोड़ सकते हैं। यह एनुम को एक साधारण कॉन्स्टेंट लिस्ट से एक पूर्ण ऑब्जेक्ट में बदल देता है जिसमें लॉजिक होता है।
\n\n<?php\n\nenum OrderStatus: string\n{\n case New = 'new';\n case Pending = 'pending';\n case Processing = 'processing';\n case Shipped = 'shipped';\n case Delivered = 'delivered';\n case Cancelled = 'cancelled';\n\n public function label(): string