ভূমিকা
PHP-তে অবজেক্ট ডিফল্টভাবে রেফারেন্স দ্বারা পাস করা হয়। এখানে রেফারেন্স হলো একটি এলিয়াস, যা দুটি ভিন্ন ভেরিয়েবলকে একই মানে লেখার অনুমতি দেয়। একটি অবজেক্ট ভেরিয়েবল নিজে অবজেক্টটি মান হিসেবে ধারণ করে না। এতে শুধু একটি অবজেক্ট আইডেন্টিফায়ার থাকে, যার মাধ্যমে মূল অবজেক্টটি খুঁজে পাওয়া যায়। যখন একটি অবজেক্ট আর্গুমেন্ট হিসেবে পাঠানো হয়, রিটার্ন করা হয় বা অ্যাসাইন করা হয়, তখন ভিন্ন ভেরিয়েবলগুলো এলিয়াস না হয়ে তাদের কপি আইডেন্টিফায়ার ধারণ করে, যা একই অবজেক্টের দিকে নির্দেশ করে।
উদাহরণ
PHP-তে spl_object_hash() ফাংশন আছে যা একটি অবজেক্টের অনন্য হ্যাশ আইডি রিটার্ন করে। নিচের কোডে, একই অবজেক্টকে বোঝানো দুটি অবজেক্ট ভেরিয়েবল একই আইডি রিটার্ন করে:
উদাহরণ
<?php
class test1{
public $name;
}
$obj1=new test1();
echo "ID of obj1: " . spl_object_hash($obj1) . "\n";
$obj2=$obj1;
echo "ID of obj2: " . spl_object_hash($obj2);
?>
আউটপুট
ফলাফল দেখায় উভয় ভেরিয়েবলের আইডি একই:
ID of obj1: 000000004355dda6000000006f04b1a7 ID of obj2: 000000004355dda6000000006f04b1a7
যখন আমরা একটি অবজেক্ট ভেরিয়েবলের রেফারেন্স তৈরি করি, নামের পূর্বে & যোগ করে, তখন প্রপার্টিতে যেকোনো পরিবর্তন স্বয়ংক্রিয়ভাবে রেফারেন্স ভেরিয়েবলে প্রতিফলিত হয়।
উদাহরণ
<?php
class test1{
public $name;
}
$obj1=new test1();
echo "ID of obj1: " . spl_object_hash($obj1) . "\n";
$obj2=&$obj1;
echo "ID of obj2: " . spl_object_hash($obj2) . "\n";
$obj1->name="Amar";
echo "name: " .$obj2->name;
?>
আউটপুট
উপরোক্ত কোড এখন নিচের আউটপুট দেয়:
ID of obj1: 00000000163cf0b8000000003ad0ed93 ID of obj2: 00000000163cf0b8000000003ad0ed93 name: Amar