PHP में SOLID सिद्धांत: स्वच्छ कोड के लिए सिद्धांत और व्यवहार

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

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

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

PHP में SOLID सिद्धांत: सिद्धांत और व्यवहार



SOLID — यह पाँच मौलिक ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग सिद्धांतों का एक संक्षिप्त नाम है, जिसे रॉबर्ट मार्टिन (अंकल बॉब) ने प्रतिपादित किया। ये सिद्धांत लचीला, रखरखाव योग्य और स्केलेबल कोड बनाने में मदद करते हैं। इस लेख में हम PHP उदाहरणों के साथ प्रत्येक सिद्धांत को समझेंगे और दिखाएंगे कि उन्हें वास्तविक परियोजनाओं में कैसे लागू किया जाए।



1. Single Responsibility Principle (SRP) — एकल उत्तरदायित्व का सिद्धांत



सार: प्रत्येक वर्ग में बदलाव का केवल एक ही कारण होना चाहिए। दूसरे शब्दों में, वर्ग को केवल एक ही कार्य के लिए जिम्मेदार होना चाहिए।



SRP का उल्लंघन:

class Order {    public function calculateTotal() { /* ... */ }    public function saveToDatabase() { /* ... */ }    public function sendEmailNotification() { /* ... */ }}


यहाँ Order वर्ग गणना, सहेजने और सूचना भेजने के लिए जिम्मेदार है। यह SRP का उल्लंघन करता है।



समाधान:

class Order {    public function calculateTotal() { /* ... */ }}

class OrderRepository { public function save(Order $order) { /* ... */ }}

class EmailNotificationService { public function sendOrderConfirmation(Order $order) { /* ... */ }}


अब प्रत्येक वर्ग की एक स्पष्ट जिम्मेदारी है, जो परीक्षण और संशोधन को सरल बनाता है।



2. Open-Closed Principle (OCP) — खुले/बंद का सिद्धांत



सार: वर्ग विस्तार के लिए खुले होने चाहिए, लेकिन संशोधन के लिए बंद। आपको मौजूदा कोड को बदले बिना नई कार्यक्षमता जोड़ने में सक्षम होना चाहिए।



OCP का उल्लंघन:

class PaymentProcessor {    public function process($type) {        if ($type == 'credit_card') {            // क्रेडिट कार्ड प्रसंस्करण        } elseif ($type == 'paypal') {            // PayPal प्रसंस्करण        }    }}


भुगतान का नया तरीका जोड़ने के लिए, PaymentProcessor वर्ग को बदलना होगा।



इंटरफेस का उपयोग कर समाधान:

interface PaymentMethod {    public function process();}

class CreditCardPayment implements PaymentMethod { public function process() { /* ... */ }}

class PayPalPayment implements PaymentMethod { public function process() { /* ... */ }}

class PaymentProcessor { public function process(PaymentMethod $method) { $method->process(); }}


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



3. Liskov Substitution Principle (LSP) — बारबरा लिस्कोव का प्रतिस्थापन सिद्धांत



सार: उपवर्गों की वस्तुएं आधार वर्ग की वस्तुओं के साथ प्रोग्राम की शुद्धता को भंग किए बिना विनिमेय होनी चाहिए। उपवर्ग को आधार वर्ग से अपेक्षित व्यवहार नहीं बदलना चाहिए।



LSP का उल्लंघन:

class Rectangle {    protected $width;    protected $height;

public function setWidth($w) { $this->width = $w; } public function setHeight($h) { $this->height = $h; } public function getArea() { return $this->width * $this->height; }}

class Square extends Rectangle { public function setWidth($w) { $this->width = $w; $this->height = $w; // सिद्धांत का उल्लंघन } public function setHeight($h) { $this->height = $h; $this->width = $h; // सिद्धांत का उल्लंघन }}


यदि क्लाइंट कोड उम्मीद करता है कि चौड़ाई बदलने से ऊंचाई प्रभावित नहीं होगी, तो Square इस उम्मीद का उल्लंघन करेगा।



समाधान: यदि उपवर्ग माता-पिता के व्यवहार से पूरी तरह मेल नहीं खाता है तो वंशानुक्रम से बचें। बेहतर है कि संयोजन या अलग-अलग वर्गों का उपयोग करें:

interface Shape                

ब्लॉग

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