PHP में OOP के माध्यम से जादू के साथ गुणों को लिखना

जादुई विधि __set तब कॉल होती है जब किसी गैर-मौजूद या छिपी हुई संपत्ति का मान बदलने का प्रयास किया जाता है। यह पैरामीटर के रूप में संपत्ति का नाम और वह मान स्वीकार करता है जो इसे असाइन करने का प्रयास किया जा रहा है।

आइए एक व्यावहारिक उदाहरण देखें। मान लीजिए कि हमारे पास Test नाम का एक वर्ग है:

Test.php<?php
  class Test
  {
    private $prop1;
    private $prop2;
  }
?>

आइए इस वर्ग में एक जादुई विधि __set बनाएं, जो फ़ंक्शन var_dump की सहायता से संपत्ति का नाम, जिससे एक्सेस किया गया था, और वह मान प्रदर्शित करेगी, जिसे सेट करने का प्रयास किया जा रहा है:

Test.php<?php
  class Test
  {
    private $prop1;
    private $prop2;
    
    public function __set($property, $value)
    {
      var_dump($property . ' ' .$value);
    }
  }
?>

आइए अपने वर्ग के काम की जाँच करें:

index.php<?php
  $test = new Test;
  $test->prop = 'value'; // __set विधि का var_dump 'prop value' आउटपुट करेगा
?>

आइए अब उस संपत्ति को मान निर्धारित करें, जिसका नाम $property वेरिएबल में संग्रहीत है:

Test.php<?php
  class Test
  {
    private $prop1;
    private $prop2;
    
    public function __set($property, $value)
    {
      $this->$property = $value; // मान सेट कर रहे हैं
    }
  }
?>

अब हम निजी गुणों को वर्ग के बाहर लिख पाएंगे:

index.php<?php
  $test = new Test;
  
  $test->prop1 = 1; // 1 लिखेंगे
  $test->prop2 = 2; // 2 लिखेंगे
?>

हम लिख तो सकते हैं, हालांकि, यह जांचने के लिए कि क्या कुछ लिखा गया है - नहीं, क्योंकि गुण निजी हैं।

इन गुणों के लिए गेटर बनाया जा सकता है या बस जादुई विधि __get का उपयोग किया जा सकता है। आइए दूसरे विकल्प का उपयोग करें:

Test.php<?php
  class Test
  {
    private $prop1;
    private $prop2;
    
    public function __set($property, $value)
    {
      $this->$property = $value;
    }
    
    // गुणों के लिए जादुई गेटर:
    public function __get($property)
    {
      return $this->$property;
    }
  }
?>

अब हम अपने वर्ग के काम की जाँच कर सकते हैं। आइए जाँच करें:

index.php<?php
  $test = new Test;
  
  $test->prop1 = 1; // 1 लिखेंगे
  $test->prop2 = 2; // 2 लिखेंगे
  
  echo $test->prop1; // 1 आउटपुट करेगा
  echo $test->prop2; // 2 आउटपुट करेगा
?>

वास्तव में, निजी गुणों में सभी को लिखने की अनुमति देना निश्चित रूप से उचित नहीं है, अन्यथा इन निजी गुणों का उद्देश्य (उनका सार) खो जाता है (उन्हें सार्वजनिक बनाना और सब कुछ आसान होगा)।

इसलिए, इस पद्धति को केवल तभी लागू किया जाना चाहिए जब वास्तव में आवश्यकता हो। अगले पाठों में, हम सफल अनुप्रयोग के उदाहरण भी देखेंगे।