পরিচিতি
এক ফাংশনে return লাস্ট স্টেটমেন্ট হিসেবে থাকতে পারে যদিও এটা বাধ্যতামূলক নয়। একটি ফাংশন কল হলে, এর বডি ব্লকের স্টেটমেন্টগুলো এক্সিকিউট হওয়ার পর প্রোগ্রাম কন্ট্রোল কলিং এনভায়রনমেন্টে ফিরে আসে—return ফাংশন ব্লকের লাস্ট স্টেটমেন্ট হোক না হোক। return স্টেটমেন্ট অনুপস্থিত থাকলে কন্ট্রোল NULL ভ্যালু রিটার্ন করে। return স্টেটমেন্টে এক্সপ্রেশন ক্লজ থাকলে এক্সপ্রেশনের মান রিটার্ন হয়। ফাংশন শুধু একটি মান রিটার্ন করতে পারে যা স্কেলার টাইপ, অ্যারে বা অবজেক্ট হতে পারে। রিটার্নড ভ্যালু ভেরিয়েবলে অ্যাসাইন করে পরবর্তী প্রসেসিংয়ের জন্য রাখা যায়।
রিটার্নসহ ফাংশন
নিচের উদাহরণে, একটি ফাংশন আর্গুমেন্ট হিসেবে পাস করা দুটি ইন্টিজারের যোগফল রিটার্ন করে—
উদাহরণ
<?php
function add($var1, $var2){
$var3= $var1+$var2 ;
return $var3;
}
$x=10;
$y=20;
$z=add($x,$y);
echo "addition=$z";
?>
আউটপুট
এটি নিচের ফলাফল দেবে—
addition=30
অ্যারে রিটার্ন
ফাংশন শুধু একটি মান রিটার্ন করতে পারে। তবে একাধিক ভ্যালুর অ্যারে রিটার্ন করা যায়। নিচের উদাহরণে দুটি নম্বর পাস করা হয়েছে একটি ফাংশনে যা অ্যাডিশন, সাবট্র্যাকশন, মাল্টিপ্লিকেশন এবং ডিভিশনের অ্যারে রিটার্ন করে—
উদাহরণ
<?php
function result($var1, $var2){
$r1=$var1+$var2;
$r2=$var1-$var2;
$r3=$var1*$var2;
$r4=$var1/$var2;
return array("add"=>$r1,"sub"=>$r2,"multiply"=>$r3,"division"=>$r4);
}
$x=10;
$y=20;
$arr=result($x,$y);
foreach ($arr as $k=>$v){
echo $k . "->" . $v . "\n";
}
?>
আউটপুট
এটি নিচের ফলাফল দেবে—
add->30 sub->-10 multiply->200 division->0.5
রিফারেন্স দিয়ে রিটার্ন (Return by reference)
আর্গুমেন্ট রেফারেন্স দিয়ে পাস করা যায় যেমন, ফাংশনও রেফারেন্স দিয়ে রিটার্ন করতে পারে। এর জন্য ফাংশনের নাম & সিম্বল দিয়ে প্রিফিক্স করতে হয়।再者, ফাংশন কলেও & সিম্বল দিতে হয়।
নিচের উদাহরণে, myfunction()-এ একটি স্ট্যাটিক অ্যারে রয়েছে। এর একটি এলিমেন্ট রেফারেন্স দিয়ে রিটার্ন করা হয়েছে এবং একটি ভেরিয়েবলে অ্যাসাইন করা হয়েছে। ভেরিয়েবলের মান পরিবর্তন করে আবার ফাংশন কল করা হয়েছে। ফাংশনের অ্যারেতে এখন পরিবর্তিত মান দেখাবে।
উদাহরণ
<?php
function &myfunction(){
static $arr=[1,2,3,4,5];
echo "array elements: ";
foreach ($arr as $i){
echo "$i ";
}
echo "\n";
return $arr[2];
}
$var=&myfunction();
echo "returned by reference : $var\n";
$var=100;
$var=&myfunction();
?>
আউটপুট
এটি নিচের ফলাফল দেবে—
array elements: 1 2 3 4 5 returned by reference : 3 array elements: 1 2 100 4 5
swap() ফাংশনে $x এবং $y এর মান ইন্টারচেঞ্জ করা হয়েছে। যেহেতু ভেরিয়েবলগুলো রেফারেন্স দিয়ে পাস করা হয়েছে, ফাংশন বাইরেও ভেরিয়েবলগুলো মডিফাইড ভ্যালু দেখাবে।
রিটার্ন টাইপ হিন্টস (Return Type Declarations)
PHP 7 থেকে, রিটার্নড ভেরিয়েবল/অবজেক্টের জন্য টাইপ হিন্টস স্পেসিফাই করা যায়, ঠিক যেমন আর্গুমেন্টের জন্য টাইপ ডিক্লেয়ার করা যায়। রিটার্ন টাইপের জন্যও সব স্কেলার টাইপ, ক্লাস এবং অ্যারে ব্যবহার করা যায়।
সিনট্যাক্স
// রিটার্ন ভ্যালুর জন্য টাইপ হিন্টসহ ফাংশন ডেফিনিশন
function myfunction($arg1, $arg2): type{
..
..
return $var;
}
সকল স্ট্যান্ডার্ড PHP ডেটা টাইপ (স্কেলার টাইপ, অ্যারে, ক্লাস/ইন্টারফেস, iterable এবং object) ফাংশন ডিক্লেয়ারেশনে রিটার্ন ভেরিয়েবলের জন্য টাইপ হিন্ট হিসেবে বৈধ।
উদাহরণ
<?php
function add($x, $y): float{
return $x+$y;
}
$var=add(5,8);
var_dump($var);
?>
আউটপুট
এটি নিচের ফলাফল দেবে—
float(13)
declare স্টেটমেন্ট strict_types=1 দিয়ে ব্যবহার করলে ডেটা টাইপ কোয়ার্সন (coercion) রোধ করা যায়।
উদাহরণ
<?php
declare (strict_types=1);
function add($x, $y): int{
return $x+$y;
}
$var=add(5.5,8.8);
var_dump($var);
?>
আউটপুট
এখন এক্সসেপশন থ্রো করবে—
PHP Fatal error: Uncaught TypeError: Return value of add() must be of the type integer, float returned