PHP में डिज़ाइन पैटर्न उदाहरण सहित: A से Z तक

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

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

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

PHP में डिज़ाइन पैटर्न: बुनियादी से उन्नत तकनीकों तक

\n\n

डिज़ाइन पैटर्न (design patterns) सॉफ्टवेयर विकास के दौरान आने वाली सामान्य समस्याओं के बार-बार सिद्ध किए गए समाधान हैं। PHP डेवलपर के लिए, पैटर्न का ज्ञान केवल रिज्यूमे में एक टिक नहीं है, बल्कि लचीला, रखरखाव योग्य और स्केलेबल कोड बनाने का एक वास्तविक उपकरण है। इस लेख में, हम PHP पर विशिष्ट उदाहरणों के साथ GoF (गैंग ऑफ फोर) पैटर्न के तीन प्रमुख समूहों का विश्लेषण करेंगे, जिन्हें आप अपने प्रोजेक्ट्स में तुरंत लागू कर सकते हैं।

\n\n

1. क्रिएशनल पैटर्न (Creational Patterns)

\n

ये पैटर्न ऑब्जेक्ट बनाने के लिए जिम्मेदार होते हैं, इंस्टेंशिएशन के तर्क को छिपाते हैं और सिस्टम को ऑब्जेक्ट बनाने और संयोजन के तरीके से स्वतंत्र बनाते हैं।

\n\n

Singleton (सिंगलटन)

\n

यह सुनिश्चित करता है कि क्लास का केवल एक इंस्टेंस हो, और उस तक वैश्विक पहुंच प्रदान करता है। क्लासिक उदाहरण डेटाबेस कनेक्शन है।

\n\n
<?php\nclass Database {\n    private static ?Database $instance = null;\n    private PDO $pdo;\n\n    private function __construct() {\n        $this->pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');\n    }\n\n    public static function getInstance(): Database {\n        if (self::$instance === null) {\n            self::$instance = new self();\n        }\n        return self::$instance;\n    }\n\n    public function query(string $sql): array {\n        // क्वेरी निष्पादन का तर्क\n        return $this->pdo->query($sql)->fetchAll();\n    }\n\n    // क्लोनिंग और डिसीरियलाइज़ेशन को रोकें\n    private function __clone() {}\n    public function __wakeup() {\n        throw new Exception("Cannot unserialize singleton");\n    }\n}\n\n// उपयोग\n$db = Database::getInstance();\n$results = $db->query("SELECT * FROM users");\n?>
\n\n

Factory Method (फैक्ट्री मेथड)

\n

यह ऑब्जेक्ट बनाने के लिए एक इंटरफ़ेस परिभाषित करता है, लेकिन उपवर्गों को बनाए जाने वाले ऑब्जेक्ट के प्रकार को बदलने की अनुमति देता है। यह संबंधित ऑब्जेक्ट्स के परिवार बनाने के लिए उपयुक्त है।

\n\n
<?php\ninterface Logger {\n    public function log(string $message): void;\n}\n\nclass FileLogger implements Logger {\n    public function log(string $message): void {\n        file_put_contents('app.log', $message . PHP_EOL, FILE_APPEND);\n    }\n}\n\nclass DatabaseLogger implements Logger {\n    public function log(string $message): void {\n        // DB में सेव करें\n        echo "Logged to DB: $message\\n";\n    }\n}\n\nabstract class LoggerFactory {\n    abstract public function createLogger(): Logger;\n\n    public function logMessage(string $message): void {\n        $logger = $this->createLogger();\n        $logger->log($message);\n    }\n}\n\nclass FileLoggerFactory extends LoggerFactory {\n    public function createLogger(): Logger {\n        return new FileLogger();\n    }\n}\n\nclass DatabaseLoggerFactory extends LoggerFactory {\n    public function createLogger(): Logger {\n        return new DatabaseLogger();\n    }\n}\n\n// उपयोग\n$factory = new FileLoggerFactory();\n$factory->logMessage("यह संदेश फ़ाइल में लिखा जाएगा");\n?>
\n\n

2. स्ट्रक्चरल पैटर्न (Structural Patterns)

\n

ये परिभाषित करते हैं कि क्लासेस और ऑब्जेक्ट्स को बड़ी संरचनाओं में कैसे जोड़ा जा सकता है, साथ ही लचीलापन और दक्षता बनाए रखते हैं।

\n\n

Adapter (एडेप्टर)

\n

असंगत इंटरफ़ेस वाले ऑब्जेक्ट्स को एक साथ काम करने की अनुमति देता है। एडेप्टर एक रैपर के रूप में कार्य करता है, एक इंटरफ़ेस के कॉल को दूसरे में बदलता है।

\n\n
<?php\n// पुराना क्लास जिसका इंटरफ़ेस असुविधाजनक है\nclass OldPaymentSystem {\n    public function processPayment(float $amount, string $currency): string {\n        return "Processing $amount $currency via legacy system";\n    }\n}\n\n// नया इंटरफ़ेस जिसका हम उपयोग करना चाहते हैं\ninterface NewPaymentInterface {\n    public function pay(float $amount): string;\n}\n\n// एडेप्टर\nclass PaymentAdapter implements NewPayme                

ब्लॉग

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