Method Overloading เป็นแนวคิดของ Object Oriented Programming ซึ่งช่วยในการสร้างแอปพลิเคชันแบบผสมในวิธีที่ง่าย ฟังก์ชันโอเวอร์โหลดหรือเมธอดโอเวอร์โหลดเป็นคุณลักษณะที่อนุญาตให้สร้างเมธอดหลายเมธอดที่มีชื่อคล้ายคลึงกันซึ่งทำงานแตกต่างกันในประเภทของพารามิเตอร์อินพุตที่ยอมรับเป็นอาร์กิวเมนต์
แนวคิดข้างต้นนั้นใช้ได้สำหรับภาษาการเขียนโปรแกรมอื่นๆ และเรียกว่า static polymorphic i.e method overloading
ตัวอย่าง
มาทำความเข้าใจกับตัวอย่างกัน
<?php
class machine {
function doTask($var1){
return $var1;
}
function doTask($var1,$var2){
return $var1 * $var1 ;
}
}
$task1 = new machine();
$task1->doTask(5,10);
?> ผลลัพธ์:
Error
คำอธิบาย:
สิ่งนี้จะทำให้เกิดข้อผิดพลาดเนื่องจาก php จะบอกว่าคุณได้ประกาศวิธีนี้สองครั้ง
แต่ภาษาโปรแกรมอื่น ๆ กล่าวว่า doTask($var1) และ doTask($var1,$var2) เป็นวิธีการโอเวอร์โหลด ในการเรียกตัวหลัง จะต้องส่งผ่านพารามิเตอร์สองตัว ในขณะที่ตัวเดิมต้องการเพียงพารามิเตอร์เดียว
ดังนั้นพฤติกรรมนี้ เช่น การตัดสินใจที่จะเรียกใช้ฟังก์ชันในขณะเขียนโค้ดจึงเรียกว่า static polymorphic เช่น method overloading
มาพูดคุยกันถึงวิธีการบรรลุวิธีการโอเวอร์โหลดที่เกี่ยวข้องกับ PHP5 ในกรณีของ PHP เราต้องใช้เมธอดเวทย์มนตร์ของ PHP __call() เพื่อให้ได้เมธอดโอเวอร์โหลด
ในการโอเวอร์โหลด PHP หมายถึงพฤติกรรมของเมธอดที่เปลี่ยนแปลงแบบไดนามิกตามพารามิเตอร์อินพุต ในบทช่วยสอนนี้ เราจะเข้าใจความรู้สึกเหล่านั้น มาพูดถึงวิธีการ __call() กัน
__call():
หากคลาสดำเนินการ __call() ดังนั้นหากวัตถุของคลาสนั้นถูกเรียกด้วยเมธอดที่ไม่มีอยู่จริง __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() ถูกสร้างขึ้นแบบไดนามิกและดำเนินการด้วยความช่วยเหลือของเมธอด __call() และพฤติกรรมของมันจะเปลี่ยนไปตามการส่งผ่านของพารามิเตอร์เป็นอ็อบเจ็กต์