Siapa bilang PHP tidak mendukung fungsi yang berlebihan? !!!
Sebenarnya PHP memang mendukung fungsi overloading, tetapi dengan cara yang berbeda. Fitur kelebihan PHP berbeda dari Java:
Interpretasi PHP tentang "kelebihan beban" berbeda dari kebanyakan bahasa yang berorientasi objek. Overloading secara tradisional memberikan kemampuan untuk memiliki beberapa metode dengan nama yang sama tetapi jumlah dan jenis argumen yang berbeda.
Periksa blok kode berikut.
Berfungsi untuk mencari jumlah n angka:
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
Berfungsi untuk menambahkan dua angka atau untuk menggabungkan dua string:
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
Pendekatan Berorientasi Objek termasuk Metode Overloading:
Overloading di PHP menyediakan cara untuk secara dinamis "membuat" properti dan metode. Entitas dinamis ini diproses melalui metode ajaib yang dapat dibangun di kelas untuk berbagai jenis tindakan.
Ref: http://php.net/manual/en/language.oop5.overloading.php
Dalam PHP, overloading berarti Anda dapat menambahkan anggota objek pada saat run-time, dengan menerapkan beberapa metode sihir seperti __set
, __get
, __call
dll
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