পরিচিতি
PHP-তে গাণিতিক, স্ট্রিং, ডেট, অ্যারে ফাংশন ইত্যাদি বিল্ট-ইন ফাংশন বড় সংখ্যক রয়েছে। নির্দিষ্ট রিকোয়ারমেন্ট অনুযায়ী ফাংশন ডিফাইন করাও সম্ভব। এধরণের ফাংশনকে ইউজার-ডিফাইনড ফাংশন (User-defined function) বলা হয়।
এক ফাংশন হলো পুনঃব্যবহারযোগ্য স্টেটমেন্ট ব্লক যা একটি নির্দিষ্ট টাস্ক সম্পাদন করে। এই ব্লক function কীওয়ার্ড দিয়ে ডিফাইন করা হয় এবং এর নাম অ্যালফাবেট বা আন্ডারস্কোর দিয়ে শুরু হয়। এই ফাংশন প্রোগ্রামের যেকোনো জায়গা থেকে যেকোনো সংখ্যক বার কল করা যায়।
সিনট্যাক্স
// ফাংশন ডিফাইন
function myfunction($arg1, $arg2, ... $argn) {
statement1;
statement2;
..
..
return $val;
}
// ফাংশন কল
$ret=myfunction($arg1, $arg2, ... $argn);
ফাংশন অপশনাল কিন্তু যেকোনো সংখ্যক আর্গুমেন্টের সাথে ডিফাইন করা যায়। তবে কল করার সময় একই সংখ্যক আর্গুমেন্ট পাস করতে হয়। ফাংশন বডিতে যেকোনো বৈধ PHP কোড থাকতে পারে—কন্ডিশনাল, লুপ ইত্যাদি (অন্য ফাংশন বা ক্লাসও ফাংশন ভেতরে ডিফাইন করা যায়)। ব্লকের স্টেটমেন্টগুলো এক্সিকিউট হওয়ার পর প্রোগ্রাম কন্ট্রোল কলিং লোকেশনে ফিরে যায়, return স্টেটমেন্ট থাকে না থাকে। return স্টেটমেন্টের সামনের এক্সপ্রেশন এর মান কলিং এনভায়রনমেন্টে রিটার্ন করে।
ইউজার-ডিফাইনড ফাংশন উদাহরণ
নিচের উদাহরণে sayHello() ফাংশনের ডেফিনিশন এবং কল দেখানো হয়েছে—
উদাহরণ
<?php
// ফাংশন ডেফিনিশন
function sayHello(){
echo "Hello World!";
}
// ফাংশন কল
sayHello();
?>
এই স্ক্রিপ্ট কমান্ড লাইন থেকে রান করলে নিচের ফলাফল দেবে—
আউটপুট
Hello World!
আর্গুমেন্টসহ ফাংশন
নিচের উদাহরণে, একটি ফাংশন দুটি ফরমাল আর্গুমেন্টসহ ডিফাইন করা হয়েছে—
উদাহরণ
<?php
function add($arg1, $arg2){
echo $arg1+$arg2 . "\n";
}
add(10,20);
add("Hello", "World");
?>
আউটপুট
এটি নিচের ফলাফল দেবে—
30 PHP Warning: A non-numeric value encountered in line 3
দ্বিতীয় কল দুটি স্ট্রিং ভ্যালু আর্গুমেন্ট হিসেবে দেয়া হয়েছে। PHP স্ট্রিংয়ের জন্য + অপারেটর সাপোর্ট করে না, তাই ওয়ার্নিং এমিট হয়।
ফাংশন রিটার্ন
নিচের উদাহরণে ইউজার-ডিফাইনড ফাংশন প্রদত্ত আর্গুমেন্ট প্রসেস করে কলিং এনভায়রনমেন্টে মান রিটার্ন করে—
উদাহরণ
<?php
function add($arg1, $arg2){
return $arg1+$arg2;
}
$val=add(10,20);
echo "addition:". $val. "\n";
$val=add("10","20");
echo "addition: $val";
?>
আউটপুট
এটি নিচের ফলাফল দেবে—
addition:30 addition:30
দ্বিতীয় কলেও আর্গুমেন্টগুলো স্ট্রিং হলেও PHP সেগুলো ইন্টিজারে কোয়ার্স (coerce) করে যোগ করে।
ডিফল্ট আর্গুমেন্ট ভ্যালুসহ ফাংশন
ফাংশন ডিফাইন করার সময় আর্গুমেন্টের ডিফল্ট ভ্যালু অ্যাসাইন করা যায়। কল করার সময় যদি আর্গুমেন্টে ভ্যালু না দেওয়া হয়, তবে ডিফল্টটি ফাংশন ভেতরে প্রসেসিংয়ের জন্য ব্যবহার হয়। নিচের উদাহরণে ডিফল্ট ভ্যালুসহ আর্গুমেন্ট ডিফাইন করা হয়েছে—
উদাহরণ
<?php
function welcome($user="Guest"){
echo "Hello $user\n";
}
// ডিফল্ট ওভাররাইড
welcome("admin");
// ডিফল্ট ব্যবহার
welcome();
?>
আউটপুট
এটি নিচের ফলাফল দেবে—
Hello admin Hello Guest
দ্বিতীয় কল ফাংশনটি ভ্যালু পাস ছাড়া কল করা হয়েছে। এই কেসে user আর্গুমেন্ট তার ডিফল্ট ভ্যালু নেয়।
ভেরিয়েবল সংখ্যক আর্গুমেন্টসহ ফাংশন
ভেরিয়েবল সংখ্যক আর্গুমেন্ট গ্রহণযোগ্য ফাংশন ডিফাইন করা সম্ভব। ফাংশন ডেফিনিশনে ফরমাল আর্গুমেন্টের নাম ... (three dots) টোকেন দিয়ে প্রিফিক্স করা হয়। নিচের উদাহরণে add() ফাংশন আর্গুমেন্ট হিসেবে দিয়ে থাকা সংখ্যাগুলো যোগ করে—
উদাহরণ
<?php
function add(...$numbers){
$ttl=0;
foreach ($numbers as $num){
$ttl=$ttl+$num;
}
return $ttl;
}
$total=add(10,15,20);
echo "total= $total\n";
echo "total=". add(1,2,3,4,5). "\n";
?>
আউটপুট
এটি নিচের ফলাফল দেবে—
total= 45 total=15
func_get_args() ফাংশন দিয়ে ফাংশনে পাস করা আর্গুমেন্টের লিস্ট পাওয়া যায়। PHP লুপ চালিয়ে পাস করা আর্গুমেন্টের প্রতিটি মান ট্রাভার্স করা যায়। সেক্ষেত্রে ফাংশন ডেফিনিশনে ফরমাল আর্গুমেন্ট থাকে না।
উদাহরণ
<?php
function add(){
$numbers=func_get_args();
$ttl=0;
foreach ($numbers as $num){
$ttl=$ttl+$num;
}
return $ttl;
}
$total=add(10,15,20);
echo "total= $total\n";
echo "total=". add(1,2,3,4,5). "\n";
?>
আউটপুট
এটি নিচের ফলাফল দেবে—
total= 45 total=15
অন্য ফাংশনের ভেতরে ফাংশন (Function within another function)
এক ফাংশন অন্য ফাংশনের বডি ব্লকে ডিফাইন করা যায়। তবে, ইনার ফাংশন কল করা যাবে না আউটার ফাংশন ইনভোক হওয়ার আগে।
উদাহরণ
<?php
function hello(){
echo "Hello\n";
function welcome(){
echo "Welcome to TutorialsPoint\n";
}
}
// welcome(); // কমেন্ট রিমুভ করলে hello() এর আগে কল হবে
hello();
welcome();
?>
কমেন্ট রিমুভ করে welcome() hello()-এর আগে কল করলে নিচের এরর মেসেজ প্রোগ্রাম থামিয়ে দেবে—
Fatal error: Uncaught Error: Call to undefined function welcome()
আউটপুট
লাইনটি কমেন্ট করে আবার রান করলে—
Hello Welcome to TutorialsPoint
রিকারসিভ ফাংশন (Recursive function)
যে ফাংশন নিজে নিজেকে কল করে সেটাকে রিকারসিভ ফাংশন বলা হয়। Безশর্ত নিজেকে কল করলে ইনফিনিট লুপ তৈরি হয় এবং স্ট্যাক ফুলের কারণে আউট অফ মেমরি এরর হয়। নিচের প্রোগ্রাম factorial() ফাংশন রিকারসিভলি কল করে—
উদাহরণ
<?php
function factorial($n){
if ($n < 2) {
return 1;
} else {
return ($n * factorial($n-1));
}
}
echo "factorial(5) = ". factorial(5);
?>
আউটপুট
factorial(5) = 120