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

วิธีการโอเวอร์โหลดใน PHP คืออะไร?


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