Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

Method Overloading ใน PHP


Method Overloading คือแนวคิด OOP สร้างหลายเมธอดชื่อเดียวกัน แต่งานต่างกันตามพารามิเตอร์ที่รับ ภาษาอื่นรองรับโดยตรง (Static Polymorphism) แต่ PHP ไม่รองรับแบบนี้

ตัวอย่างที่ล้มเหลวใน PHP

<?php 
class machine { 
    function doTask($var1){ return $var1; } 
    function doTask($var1,$var2){ return $var1 * $var1; } 
} 
$task1 = new machine(); 
$task1->doTask(5,10); 
?>

ผลลัพธ์

Error

PHP error: Cannot redeclare method doTask() แต่ภาษาอื่นถือว่า overloaded method เรียกตามจำนวนพารามิเตอร์ เรียกว่า Static Polymorphism

ใน PHP ใช้ Magic Method __call() เพื่อทำ Method Overloading แบบ Dynamic: พฤติกรรมเมธอดเปลี่ยนตามพารามิเตอร์ที่ส่งเข้า

__call()

ถ้าคลาสมี __call() เมื่อเรียกเมธอดที่ไม่มีอยู่จริง __call() จะถูกเรียกแทน

ตัวอย่าง Method Overloading ด้วย __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() ถูกสร้างแบบ dynamic โดย __call() พฤติกรรมเปลี่ยนตามจำนวนพารามิเตอร์ที่ส่งเข้า