এই আর্টিকেলে আমরা PHP-তে পাস বাই ভ্যালু এবং পাস বাই রেফারেন্স শিখব।
এখন এই দুটি কনসেপ্ট বিস্তারিতভাবে বুঝি।
PHP-তে সাধারণত ফাংশনে আর্গুমেন্ট পাস করার সময় পাস বাই ভ্যালু পদ্ধতি অনুসরণ করা হয়। আমরা এই প্র্যাকটিস ফলো করি কারণ যদি ফাংশনের ভিতরে আর্গুমেন্টের ভ্যালু পরিবর্তন হয়, তবে সেটি ফাংশনের বাইরে পরিবর্তন হয় না।
কিছু কেসে আমরা ফাংশন আর্গুমেন্ট মডিফাই করতে চাই, তখন ফাংশনকে তার আর্গুমেন্ট মডিফাই করার অনুমতি দিতে হলে সেগুলো পাস বাই রেফারেন্স হতে হবে।
চলুন পাস বাই রেফারেন্স দিয়ে শুরু করি। যেমন বলা হয়েছে, আমরা একটি ভেরিয়েবল রেফারেন্স দিয়ে ফাংশনে পাস করতে পারি যাতে ফাংশনটি ভেরিয়েবলটি মডিফাই করতে পারে। পাস বাই রেফারেন্স প্রক্রিয়া শুরু করতে ফাংশন ডেফিনিশনে আর্গুমেন্ট নামের আগে অ্যাম্পারস্যান্ড (&) যোগ করতে হয়।
উদাহরণ
<?php
function calculate(&$a){
$a++;
}
$a = 5;
calculate($a);
echo $a;
?>
আউটপুট
6
ব্যাখ্যা
এখানে আমরা $a ভেরিয়েবল ডিক্লেয়ার করেছি এবং এটিকে পাস বাই রেফারেন্স হিসেবে calculate() ফাংশনে পাস করেছি। তাই প্রিন্সিপল অনুযায়ী, যদি ফাংশনের ভিতরে $a-র ভ্যালু পরিবর্তন হয়, তবে সেটি ফাংশনের বাইরেও পরিবর্তিত হবে।
নোট
ফাংশন কল-এ কোনো রেফারেন্স সাইন থাকে না - শুধু ফাংশন ডেফিনিশনে থাকে। ফাংশন ডেফিনিশনই আর্গুমেন্টকে সঠিকভাবে রেফারেন্স দিয়ে পাস করার জন্য যথেষ্ট। PHP 5.4 ভার্সনে calculate(&$a) ব্যবহার করলে ডিপ্রিকেটেড বলে এরর থ্রো করে।
উদাহরণ (পাস বাই ভ্যালু)
<?php
function calculate($a){
$a++;
echo $a."<br/>";
}
$a = 5;
calculate($a);
echo $a;
?>
আউটপুট
6
5
ব্যাখ্যা
এখানে আমরা calculate() ফাংশনে ভ্যালু পাস বাই ভ্যালু হিসেবে পাস করেছি। এর ভ্যালু ফাংশনের ভিতরে পরিবর্তিত হয়েছে কিন্তু সেটি ফাংশনের বাইরে রিফ্লেক্ট হয়নি। ভেরিয়েবলের ভ্যালু ফাংশনের বাইরে একই থাকে।