পরিচয়
PHP এ, একটি ফাংশনের আর্গুমেন্ট মান দ্বারা পাস বা রেফারেন্স দ্বারা পাস করা যেতে পারে। ডিফল্টরূপে, প্রকৃত আর্গুমেন্টের মানগুলি মানের দ্বারা আনুষ্ঠানিক আর্গুমেন্টে স্থানান্তরিত হয় যা ফাংশনের ভিতরে স্থানীয় ভেরিয়েবলে পরিণত হয়। তাই, এই ভেরিয়েবলের পরিবর্তন প্রকৃত আর্গুমেন্ট ভেরিয়েবলের মান পরিবর্তন করে না।
যখন আর্গুমেন্ট রেফারেন্সের মাধ্যমে পাস করা হয়, তখন আনুষ্ঠানিক আর্গুমেন্টের মানের পরিবর্তন প্রকৃত আর্গুমেন্ট ভেরিয়েবলে প্রতিফলিত হয় কারণ আগেরটি লেটারের একটি রেফারেন্স। এইভাবে রেফারেন্স মেকানিজম দ্বারা পাস গ্লোবাল স্পেসে পরোক্ষভাবে ডেটা ম্যানিপুলেট করতে সাহায্য করে। এটি একটি ফাংশন শুধুমাত্র একটি ভেরিয়েবল রিটার্ন করতে পারে এই সত্যকে অতিক্রম করতে সাহায্য করে।
মূল্য দ্বারা পাস
নিম্নলিখিত উদাহরণে, দুটি ভেরিয়েবল swap() ফাংশনে পাস করা হয়। যদিও সোয়াপিং মেকানিজম ফাংশনের অভ্যন্তরে সঞ্চালিত হয় এটি পাস করা ভেরিয়েবলের মান পরিবর্তন করে না
উদাহরণ
<?php function swap($arg1, $arg2){ echo "inside function before swapping: arg1=$arg1 arg2=$arg2\n"; $temp=$arg1; $arg1=$arg2; $arg2=$temp; echo "inside function after swapping: arg1=$arg1 arg2=$arg2\n"; } $arg1=10; $arg2=20; echo "before calling function : arg1=$arg1 arg2=$arg2\n"; swap($arg1, $arg2); echo "after calling function : arg1=$arg1 arg2=$arg2\n"; ?>
আউটপুট
এই উদাহরণটি নিম্নলিখিত আউটপুট দেয়
before calling function : arg1=10 arg2=20 inside function before swapping: arg1=10 arg2=20 inside function after swapping: arg1=20 arg2=10 after calling function : arg1=10 arg2=20
রেফারেন্স দ্বারা পাস
রেফারেন্স দ্বারা আর্গুমেন্ট পেতে, পরিবর্তনশীল ব্যবহৃত আনুষ্ঠানিক যুক্তি &চিহ্ন দ্বারা উপসর্গ করা আবশ্যক। এটি ফাংশন কল করার জন্য ব্যবহৃত ভেরিয়েবলের উল্লেখ করে। তাই, অভ্যন্তরীণ ফাংশন অদলবদল করার ফলাফলটি পাস করা আসল ভেরিয়েবলগুলিতেও প্রতিফলিত হবে
উদাহরণ
<?php function swap(&$arg1, &$arg2){ echo "inside function before swapping: arg1=$arg1 arg2=$arg2\n"; $temp=$arg1; $arg1=$arg2; $arg2=$temp; echo "inside function after swapping: arg1=$arg1 arg2=$arg2\n"; } $arg1=10; $arg2=20; echo "before calling function : arg1=$arg1 arg2=$arg2\n"; swap($arg1, $arg2); echo "after calling function : arg1=$arg1 arg2=$arg2\n"; ?>
আউটপুট
অদলবদল করার ফলাফল নিম্নরূপ দেখানো হবে
before calling function : arg1=10 arg2=20 inside function before swapping: arg1=10 arg2=20 inside function after swapping: arg1=20 arg2=10 after calling function : arg1=20 arg2=10
নিম্নলিখিত উদাহরণে, অ্যারে উপাদান হল অ্যারে আরম্ভ করার আগে ঘোষিত পৃথক ভেরিয়েবলের উল্লেখ। উপাদান পরিবর্তন করা হলে, পরিবর্তনশীল মানও পরিবর্তিত হয়
উদাহরণ
<?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
এটি একটি ফাংশনে একটি অ্যারে রেফারেন্স দ্বারা পাস করাও সম্ভব
উদাহরণ
<?php function arrfunction(&$arr){ for ($i=0;$i<5;$i++) $arr[$i]=$arr[$i]+10; } $arr=[1,2,3,4,5]; arrfunction($arr); foreach ($arr as $i) echo $i . " "; ?>
আউটপুট
সংশোধিত অ্যারে নিম্নরূপ প্রদর্শিত হবে
11 12 13 14 15
অবজেক্ট এবং রেফারেন্স
পিএইচপি-তে, অবজেক্ট ডিফল্টভাবে রেফারেন্স দ্বারা পাস করা হয়। যখন অবজেক্টের রেফারেন্স তৈরি করা হয়, তখন তার রেফারেন্স আর্গুমেন্ট হিসেবে $this আকারে পাঠানো হয় যা প্রথম অবজেক্টেরও রেফারেন্স
উদাহরণ
<?php class test1{ private $name; function getname(){ return $this->name; } function setname($name){ $this->name=$name; } } $obj1=new test1(); $obj2=&$obj1; $obj1->setname("Amar"); echo "name: " .$obj2->getname(); ?>
আউটপুট
উপরের কোড নিম্নলিখিত আউটপুট প্রদর্শন করবে
name: Amar