পরিচিতি
PHP-তে, রেফারেন্স (References) একই ভেরিয়েবল কন্টেন্টকে ভিন্ন নাম দিয়ে এক্সেস করতে সক্ষম করে। এগুলো C/C++-এর পয়েন্টারের মতো নয় কারণ এডারיתমেটিক অপারেশন করা যায় না। C/C++-তে এগুলো একচুয়াল মেমরি অ্যাড্রেস। PHP-তে বিপরীতে, এগুলো সিম্বল টেবিল এলিয়াস (symbol table aliases)। PHP-তে ভেরিয়েবল নাম এবং ভেরিয়েবল কন্টেন্ট আলাদা, তাই একই কন্টেন্টের ভিন্ন নাম থাকতে পারে। একটি রেফারেন্স ভেরিয়েবল আসল ভেরিয়েবলের সামনে & সাইন প্রিফিক্স করলে তৈরি হয়। অর্থাৎ $b=&$a মানে $b হলো $a-র একটি রেফারেন্স ভেরিয়েবল।
রেফারেন্স দিয়ে অ্যাসাইনমেন্ট (Assign By Reference)
নিচের উদাহরণে, দুটি ভেরিয়েবল একই মানকে রেফার করে—
উদাহরণ
<?php $var1=10; $var2=&$var1; echo "$var1 $var2\n"; $var2=20; echo "$var1 $var2\n"; ?>
আউটপুট
একটার মান পরিবর্তন করলে অন্যটিও রিফলেক্ট হবে—
10 10 20 20
আপনি যদি অনডিফাইনড ভেরিয়েবল রেফারেন্স দিয়ে অ্যাসাইন, পাস বা রিটার্ন করেন, তবে সেটি তৈরি হয়ে যাবে। ফাংশন ভেতরে গ্লোবাল ডিক্লেয়ার করা ভেরিয়েবলে রেফারেন্স অ্যাসাইন করলে, রেফারেন্স শুধু ফাংশন ভেতরে ভিজিবল হবে। foreach স্টেটমেন্টে ভেরিয়েবলে ভ্যালু অ্যাসাইন করলে রেফারেন্সগুলোও মডিফাই হয়।
উদাহরণ
<?php $arr=[1,2,3,4,5]; $i=&$ref; foreach($arr as $i) echo $i*$i, "\n"; echo "ref = ". $ref; ?>
আউটপুট
$ref-র ভ্যালু অ্যারের লাস্ট এলিমেন্টের মান ধারণ করে—
1 4 9 16 25 ref = 5
নিচের উদাহরণে, অ্যারে এলিমেন্টগুলো আলাদা ভেরিয়েবলসের রেফারেন্স যেগুলো অ্যারে ইনিশিয়ালাইজেশনের আগে ডিক্লেয়ার করা হয়েছে। যদি এলিমেন্ট মডিফাই করা হয়, তবে ভেরিয়েবলগুলোও চেঞ্জ হয়—
উদাহরণ
<?php $a = 10; $b = 20; $c=30; $arr = array(&$a, &$b, &$c); for ($i=0; $i<3; $i++) $arr[$i]++; echo "$a $b $c"; ?>
আউটপুট
$a, $b এবং $c-র মানও ইনক্রিমেন্ট হয়েছে—
11 21 31