PHP में Public, Private, Protected: एनकैप्सुलेशन की पूरी गाइड

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

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

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

PHP में Public, Private, Protected: क्यों इनके बिना आपका कोड अस्त-व्यस्त हो जाएगा?

\n\n

कल्पना कीजिए कि आप एक घर बना रहे हैं। इसमें एक मुख्य दरवाज़ा है (जिसमें कोई भी आ सकता है), एक बेडरूम जो ताले से बंद है (सिर्फ परिवार के लिए), और दीवार में एक तिजोरी (जिसकी चाबी सिर्फ आपके पास है)। PHP की ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (OOP) की दुनिया में, ऐसे "दरवाज़ों" और "तालों" को एक्सेस मॉडिफायर (Access Modifiers) कहा जाता है।

\n\n

अगर आपने कभी PHP में क्लासेज़ लिखी हैं, तो आपने public, private और protected शब्द ज़रूर देखे होंगे। लेकिन असल में इनका मतलब क्या है? सब कुछ public क्यों नहीं कर देते और चैन से क्यों नहीं बैठ जाते? इसका जवाब सीधा है: इनके बिना आपका कोड एक ऐसे खुले आँगन जैसा हो जाएगा, जहाँ कोई भी स्क्रिप्ट आपके प्रोग्राम के लॉजिक को गलती से तोड़ सकती है।

\n\n

इस लेख में हम PHP में एक्सेस मॉडिफायर्स को असल उदाहरणों के साथ समझेंगे, उनके बीच का अंतर जानेंगे, और सीखेंगे कि मज़बूत और लचीला कोड बनाने के लिए उनका इस्तेमाल कैसे करें। यह गाइड Stack Overflow के एक लोकप्रिय प्रश्न पर आधारित है और इसे शैक्षिक वेबसाइट pythonlib.ru के लिए तैयार किया गया है।

\n\n

एक्सेस मॉडिफायर क्या हैं और इनकी ज़रूरत क्यों है?

\n\n

एक्सेस मॉडिफायर वे कीवर्ड हैं जो यह तय करते हैं कि क्लास के प्रॉपर्टीज़ और मेथड्स तक कहाँ से पहुँचा जा सकता है। ये एनकैप्सुलेशन (Encapsulation) की नींव हैं - जो OOP के चार स्तंभों में से एक है। एनकैप्सुलेशन ऑब्जेक्ट की आंतरिक संरचना को छिपाता है और डेटा को गलत उपयोग से बचाता है।

\n\n

PHP में तीन स्तर के एक्सेस होते हैं:

\n\n
    \n
  • Public – सभी के लिए सुलभ (क्लास के अंदर और बाहर दोनों जगह से)।
  • \n
  • Private – सिर्फ उसी क्लास के अंदर सुलभ जहाँ इसे डिफाइन किया गया है।
  • \n
  • Protected – क्लास के अंदर और उसकी चाइल्ड क्लासेज़ (inheritance) में सुलभ।
  • \n
\n\n

आइए, प्रैक्टिकल उदाहरणों के साथ हर एक को समझते हैं।

\n\n

Public: "बिना खटखटाए अंदर आइए"

\n\n

public मॉडिफायर सबसे खुला होता है। public घोषित किए गए प्रॉपर्टीज़ और मेथड्स को कहीं से भी पढ़ा और बदला जा सकता है: दूसरी क्लास से, ग्लोबल स्क्रिप्ट से, या कहीं से भी।

\n\n
<?php\nclass Car {\n    public $brand = 'Toyota';\n\n    public function honk() {\n        return 'Beep!';\n    }\n}\n\n$myCar = new Car();\necho $myCar->brand; // Toyota – काम करता है\n$myCar->brand = 'Honda'; // बदल रहे हैं – काम करता है\necho $myCar->honk(); // Beep!\n?>
\n\n

यह सुविधाजनक लगता है, है ना? लेकिन इसमें एक समस्या है। मान लीजिए कि User क्लास में एक प्रॉपर्टी है public $password। बाहर का कोई भी कोड इसे पढ़ और बदल सकता है। यह सुरक्षा के लिए बहुत बड़ा खतरा है।

\n\n

कब उपयोग करें: उन मेथड्स के लिए जो क्लास के पब्लिक API का हिस्सा हैं (जैसे getUserName()), या कॉन्स्टेंट के लिए।

\n\n

Private: "वह तिजोरी जिसे कोई नहीं खोल सकता"

\n\n

private मॉडिफायर public के बिल्कुल विपरीत है। प्रॉपर्टी या मेथड सिर्फ उसी क्लास के अंदर सुलभ होता है जहाँ इसे डिफाइन किया गया है। यहाँ तक कि चाइल्ड क्लासेज़ (inheritance) भी पैरेंट के private मेंबर्स को नहीं देख सकतीं।

\n\n
<?php\nclass BankAccount {\n    private $balance = 1000;\n\n    private function calculateInterest() {\n        return $this->balance * 0.05;\n    }\n\n    public function getBalance() {\n        return $this->balance;\n    }\n\n    public function applyInterest() {\n        $this->balance += $this->calculateInterest();\n    }\n}\n\n$account = new BankAccount();\n// echo $account->balance; // Error! Cannot access private property\n// echo $account->calculateInterest(); // Error! Cannot access private method\necho $account->getBalance(); // 1000 – काम करता है, क्योंकि method public है\n$account->applyInterest();\necho $account->getBalance(); // 1050\n?>
\n\n

इस उदाहरण में, $balance और calculateInterest() बाहरी दुनिया से छिपे हुए हैं। हम बैलेंस को सिर्फ पब्लिक मेथड्स getBalance() और applyInterest() के ज़रिए मैनेज कर रहे हैं। इसे ही कहते हैं एनकैप्सुलेशन।

ब्लॉग

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