PHP में OOP में ऑब्जेक्ट्स का रेफरेंस द्वारा पासिंग
मान लीजिए हमारे पास User नामक एक क्लास है:
<?php
class User
{
public $name;
public $age;
public function __construct($name, $age)
{
$this->name = $name;
$this->age = $age;
}
}
?>
मान लीजिए हम इस क्लास का एक ऑब्जेक्ट बनाते हैं:
<?php
$user = new User('john', 30);
?>
अब इस स्थिति की कल्पना करें: आप
वेरिएबल $user का मान किसी
अन्य वेरिएबल को असाइन करना चाहते हैं, उदाहरण के लिए
$test।
यदि बात ऑब्जेक्ट्स की नहीं, बल्कि प्रिमिटिव्स
की हो रही होती, यानी स्ट्रिंग्स, नंबर्स, ऐरे इत्यादि की,
तो वेरिएबल $test में $user वेरिएबल के
मान की एक कॉपी जाती।
इसका मतलब है कि भविष्य में किसी भी वेरिएबल में परिवर्तन दूसरे वेरिएबल के मान को नहीं बदलता। आइए एक उदाहरण से देखें:
<?php
$user = 1;
$test = $user; // $test वेरिएबल में अब 1 है
$test = 2; // $test वेरिएबल में अब 2 है, लेकिन $user में अभी भी 1 है
?>
ऑब्जेक्ट्स के साथ मामला अलग है - दूसरे वेरिएबल में असाइन करने पर ऑब्जेक्ट्स कॉपी नहीं होते, बल्कि रेफरेंस द्वारा पास होते हैं: इसका मतलब है कि इन दोनों वेरिएबल्स का मान एक ही ऑब्जेक्ट होता है। इसका एक महत्वपूर्ण परिणाम है: यदि एक वेरिएबल का उपयोग करके ऑब्जेक्ट के कुछ प्रॉपर्टीज को बदला जाए, तो दूसरे वेरिएबल में भी यही परिवर्तन दिखाई देंगे।
आइए व्यवहार में देखें। यूजर के साथ एक ऑब्जेक्ट बनाएं:
<?php
$user = new User('john', 30);
?>
ऑब्जेक्ट को दूसरे वेरिएबल में असाइन करें:
<?php
$test = $user;
?>
$test वेरिएबल में
name प्रॉपर्टी को बदलें
<?php
$test->name = 'eric';
?>
आइए जांचें कि क्या साझा ऑब्जेक्ट बदल गया है।
$user वेरिएबल से
name प्रॉपर्टी आउटपुट करें:
<?php
echo $user->name; // 'eric' आउटपुट करेगा!
?>
Product नामक एक क्लास बनाएं, जिसमें
निम्नलिखित प्रॉपर्टीज हों: name,
price।
Product क्लास का एक ऑब्जेक्ट बनाएं, इसे
$product1 वेरिएबल में रिकॉर्ड करें।
$product1 वेरिएबल का मान
$product2 वेरिएबल में असाइन करें। जांचें
कि क्या दोनों वेरिएबल्स एक ही ऑब्जेक्ट को रेफर कर रहे हैं।