আপনাকে কে বলেছিল পিএইচপি ফাংশন ওভারলোডিং সমর্থন করে না? !!!
আসলে পিএইচপি ফাংশন ওভারলোডিং সমর্থন করে, তবে অন্যভাবে। পিএইচপি-র ওভারলোডিং বৈশিষ্ট্যগুলি জাভা থেকে আলাদা:
পিএইচপি'র "ওভারলোডিং" এর ব্যাখ্যাটি বেশিরভাগ অবজেক্ট ওরিয়েন্টেড ভাষার চেয়ে আলাদা। ওভারলোডিং traditionতিহ্যগতভাবে একই নামের সাথে বিভিন্ন পরিমাণ এবং যুক্তিগুলির ধরণের একাধিক পদ্ধতি রাখার ক্ষমতা সরবরাহ করে।
নিম্নলিখিত কোড ব্লক চেকআউট।
N সংখ্যার যোগফল খুঁজে পেতে কাজ:
function findSum() {
$sum = 0;
foreach (func_get_args() as $arg) {
$sum += $arg;
}
return $sum;
}
echo findSum(1, 2), '<br />'; //outputs 3
echo findSum(10, 2, 100), '<br />'; //outputs 112
echo findSum(10, 22, 0.5, 0.75, 12.50), '<br />'; //outputs 45.75
দুটি সংখ্যা যুক্ত করতে বা দুটি স্ট্রিং সংমিশ্রিত করার জন্য ফাংশন:
function add() {
//cross check for exactly two parameters passed
//while calling this function
if (func_num_args() != 2) {
trigger_error('Expecting two arguments', E_USER_ERROR);
}
//getting two arguments
$args = func_get_args();
$arg1 = $args[0];
$arg2 = $args[1];
//check whether they are integers
if (is_int($arg1) && is_int($arg2)) {
//return sum of two numbers
return $arg1 + $arg2;
}
//check whether they are strings
if (is_string($arg1) && is_string($arg2)) {
//return concatenated string
return $arg1 . ' ' . $arg2;
}
trigger_error('Incorrect parameters passed', E_USER_ERROR);
}
echo add(10, 15), '<br />'; //outputs 25
echo add("Hello", "World"), '<br />'; //outputs Hello World
পদ্ধতি ওভারলোডিং সহ অবজেক্ট ওরিয়েন্টড অ্যাপ্রোচ:
পিএইচপি-তে ওভারলোডিং গতিসম্পন্ন বৈশিষ্ট্য এবং পদ্ধতিগুলি "তৈরি" করার উপায় সরবরাহ করে। এই গতিশীল সত্তা যাদু পদ্ধতিগুলির মাধ্যমে প্রক্রিয়াজাত করা হয় যেগুলি বিভিন্ন ক্রিয়াকলাপের জন্য কোনও শ্রেণিতে প্রতিষ্ঠা করতে পারে।
তথ্যসূত্র: http://php.net/manual/en/language.oop5.overloading.php
পিএইচপি, মানে ওভারলোডিং আপনি রান সময়ে বস্তুর সদস্যদের যুক্ত করতে পারেন অনুরূপ যাদু পদ্ধতির কিছু প্রয়োগ করে, __set
, __get
, __call
ইত্যাদি
class Foo {
public function __call($method, $args) {
if ($method === 'findSum') {
echo 'Sum is calculated to ' . $this->_getSum($args);
} else {
echo "Called method $method";
}
}
private function _getSum($args) {
$sum = 0;
foreach ($args as $arg) {
$sum += $arg;
}
return $sum;
}
}
$foo = new Foo;
$foo->bar1(); // Called method bar1
$foo->bar2(); // Called method bar2
$foo->findSum(10, 50, 30); //Sum is calculated to 90
$foo->findSum(10.75, 101); //Sum is calculated to 111.75