Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> PHP

Nạp chồng phương thức (Method Overloading) trong PHP

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ố.