PHP không hỗ trợ nạp chồng tĩnh (static overloading) như Java/C++: không thể định nghĩa hai method trùng tên khác tham số.
<?php
class Machine {
function doTask($a) { return $a; }
function doTask($a, $b) { return $a * $b; } // LỖI: Cannot redeclare
}
?>
Giải pháp PHP: Magic Method __call()
PHP dùng nạp chồng động qua __call($name, $args): khi gọi method không tồn tại, __call() được kích hoạt.
Ví dụ
<?php
class Shape {
const PI = 3.142;
public function __call($name, $args) {
if ($name === 'area') {
switch (count($args)) {
case 0: return 0;
case 1: return self::PI * $args[0]; // hình tròn
case 2: return $args[0] * $args[1]; // chữ nhật
}
}
}
}
$c = new Shape();
echo $c->area(3); // 9.426 (bán kính 3)
$r = new Shape();
echo $r->area(8, 6); // 48 (rộng 8, cao 6)
?>
Kết quả
9.426
48
Method area() được tạo động, hành vi thay đổi theo số lượng tham số.