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() และพฤติกรรมของมันจะเปลี่ยนไปตามการส่งผ่านของพารามิเตอร์เป็นอ็อบเจ็กต์