মেথড ওভারলোডিং হলো অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং-এ একটি কনসেপ্ট যা কম্পোজিট অ্যাপ্লিকেশন সহজে বিল্ড করতে সাহায্য করে। ফাংশন ওভারলোডিং বা মেথড ওভারলোডিং হলো একটি ফিচার যা একই নামে কিন্তু ভিন্ন ইনপুট প্যারামিটার গ্রহণ করে আলাদা আলাদা কাজ করার একাধিক মেথড তৈরি করার অনুমতি দেয়।
উপরোক্ত কনসেপ্ট অন্যান্য প্রোগ্রামিং ল্যাঙ্গুয়েজের জন্য ঠিকই এবং এটিকে স্ট্যাটিক পলিমরফিজম বা মেথড ওভারলোডিং বলা হয়।
উদাহরণ
একটি উদাহরণ দিয়ে বুঝি।
<?php
class machine {
function doTask($var1){
return $var1;
}
function doTask($var1,$var2){
return $var1 * $var1;
}
}
$task1 = new machine();
$task1->doTask(5,10);
?>
আউটপুট:
Error
ব্যাখ্যা:
এটি এরর জেনারেট করবে কারণ PHP বলবে আপনি এই মেথডটি দুবার ডিক্লেয়ার করেছেন।
তবে অন্যান্য প্রোগ্রামিং ল্যাঙ্গুয়েজ বলে, doTask($var1) এবং doTask($var1,$var2) ওভারলোডেড মেথড। পরবর্তীটিকে কল করতে দুটি প্যারামিটার পাস করতে হবে, ஆனால் পূর্বেরটিতে শুধু একটি প্যারামিটার দরকার।
তাই এই বিহেভিয়ার অর্থাৎ কোডিং টাইমে কোন ফাংশন কল হবে সেটি ডিসাইড করা হলো স্ট্যাটিক পলিমরফিজম অর্থাৎ মেথড ওভারলোডিং।
আবদ PHP 5-এ মেথড ওভারলোডিং কীভাবে অর্জন করা যায় তা আলোচনা করি। PHP-র কেসে আমাদের PHP-র ম্যাজিক মেথড __call() ব্যবহার করতে হবে মেথড ওভারলোডিং অর্জন করতে।
PHP-তে ওভারলোডিং মানে মেথডের বিহেভিয়ার ইনপুট প্যারামিটার অনুযায়ী ডাইনামিক্যালি পরিবর্তন হয়। এই টিউটোরিয়ালে আমরা সেই ধারণাগুলো বুঝব। চলুন __call() মেথড আলোচনা করি।
__call():
যদি একটি ক্লাস __call() ইমপ্লিমেন্ট করে, তবে যদি সেই ক্লাসের অবজেক্টকে এমন একটি মেথড দিয়ে কল করা হয় যা এক্সিস্ট করে না, তবে সেই মেথডের বদলে __call() কল হবে।
উদাহরণ
একটি উদাহরণ দিয়ে মেথড ওভারলোডিং বুঝি।
<?php
class Shape {
const PI = 3.142;
function __call($name,$arg){
if($name == 'area')
switch(count($arg)){
case 0: return 0;
case 1: return self::PI * $arg[0];
case 2: return $arg[0] * $arg[1];
}
}
}
$circle = new Shape();
echo $circle->area(3);
$rect = new Shape();
echo $rect->area(8,6);
?>
আউটপুট:
9.426
48
ব্যাখ্যা:
এখানে area() মেথড ডাইনামিক্যালি তৈরি হয়েছে এবং ম্যাজিক মেথড __call() সাহায্যে এক্সিকিউট হয়েছে এবং এর বিহেভিয়ার অবজেক্ট হিসেবে পাস করা প্যারামিটার অনুযায়ী পরিবর্তন হয়েছে।