PHP में Enum: switch से लेकर Enum तक (पूर्ण गाइड)

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

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\n

Native enumerations आने से पहले, हमारे पास दो मुख्य तरीके थे: class constants और abstract classes के साथ "जुगाड़"। दोनों को समझते हैं।

\n\n

तरीका #1: Class Constants (सबसे लोकप्रिय)

\n\n
class 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\n
abstract 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\n

PHP 8.1 में Native Enum: एक क्रांति

\n\n

PHP 8.1 के आने के साथ, "PHP enum" की समस्या हमेशा के लिए हल हो गई। अब enumerations पूर्ण प्रकार (types) हैं जो:

\n\n
    \n
  • सख्त typing को सपोर्ट करते हैं
  • \n
  • बिल्ट-इन मेथड्स (name, value, cases()) रखते हैं
  • \n
  • Interfaces को implement कर सकते हैं
  • \n
  • Traits को सपोर्ट करते हैं
  • \n
  • match और switch के साथ एकीकृत होते हैं
  • \n
\n\n

PHP में Enum का बेसिक सिंटैक्स

\n\n
enum 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\n

Enum के प्रकार: Pure और Backed

\n\n

PHP दो प्रकार के enumerations सपोर्ट करता है:

\n\n

1. Pure Enum (शुद्ध enumerations)

\n

बिना किसी विशिष्ट मान के। फ्लैग, स्टेटस, टाइप के लिए आदर्श।

\n\n
enum 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\n

2. Backed Enum (मान सहित enumerations)

\n

जब enum को किसी विशिष्ट मान (स्ट्रिंग या पूर्णांक) से जोड़ना हो।

\n\n
enum 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$                

ब्लॉग

पुस्तक अनुशंसाएँ