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

PHP Overloading


แนะนำตัว

การตีความการโอเวอร์โหลดนั้นแตกต่างกันใน PHP เมื่อเทียบกับภาษาเชิงวัตถุอื่น ๆ เช่น C ++ หรือ Java ซึ่งคำนี้หมายถึงความสามารถในการมีคลาสด้วยเมธอดชื่อเดียวกันมากกว่าหนึ่งครั้ง แต่มีอาร์กิวเมนต์และ/หรือประเภทการส่งคืนต่างกัน ใน PHP ในทางกลับกัน คุณลักษณะของการสร้างคุณสมบัติและวิธีการแบบไดนามิกเรียกว่าการโอเวอร์โหลด วิธีการวิเศษของ PHP (ชื่อเมธอดที่ขึ้นต้นด้วยขีดล่างคู่) ใช้เพื่อตั้งค่าคุณสมบัติและเมธอดแบบไดนามิก

วิธีการมายากลต่อไปนี้จะใช้สำหรับการโอเวอร์โหลดคุณสมบัติ -

ไวยากรณ์

public __set ( string $name , mixed $value ) : void
public __get ( string $name ) : mixed
public __isset ( string $name ) : bool
public __unset ( string $name ) : void

__set() ใช้สำหรับเขียนข้อมูลไปยังคุณสมบัติที่ไม่สามารถเข้าถึงได้ซึ่งมีการป้องกันหรือส่วนตัวหรือไม่มีอยู่

__get() อ่านข้อมูลจากคุณสมบัติที่ไม่สามารถเข้าถึงได้

__isset() เรียก isset() หรือ empty() ในคุณสมบัติที่ไม่สามารถเข้าถึงได้

__unset() ถูกเรียกใช้เมื่อมีการเรียก unset() ในคุณสมบัติที่ไม่สามารถเข้าถึงได้

ในโค้ดต่อไปนี้ คุณสมบัติไดนามิกชื่อ myprop ถูกตั้งค่า ดึงกลับ และยกเลิกการตั้งค่า

ตัวอย่าง

<?php
class myclass{
   public function __set($name, $value){
      echo "setting $name property to $value \n";
      $this->$name = $value;
   }
   public function __get($name){
      echo "value of $name property is ";
      return $this->$name;
   }
   public function __isset($name){
      return isset($this->$name);
   }
   public function __unset($name){
      unset($this->$name);
   }
}
$obj = new myclass();
$obj->myprop="test";
echo $obj->myprop . "\n";
var_dump (isset($obj->myprop));
unset($obj->myprop);
var_dump (isset($obj->myprop));
?>

ผลลัพธ์

ผลลัพธ์จะเป็นดังนี้ −

setting myprop property to test
test
bool(true)
bool(false)

วิธีการโอเวอร์โหลด

เมธอดสองเมธอดที่ใช้ในการตั้งค่าเมธอดแบบไดนามิกคือ __call() และ __callStatic()

public __call ( string $name , array $arguments ) : mixed
public static __callStatic ( string $name , array $arguments ) : mixed

__call() ถูกทริกเกอร์เมื่อเรียกใช้เมธอดที่ไม่สามารถเข้าถึงได้ในบริบทของอ็อบเจ็กต์

__callStatic() ถูกทริกเกอร์เมื่อเรียกใช้เมธอดที่ไม่สามารถเข้าถึงได้ในบริบทแบบคงที่

ตัวอย่างต่อไปนี้แสดงให้เห็นถึงวิธีการโอเวอร์โหลดใน PHP

ตัวอย่าง

<?php
class myclass{
   public function __call($name, $args){
      // Note: value of $name is case sensitive.
      echo "Calling object method $name with " . implode(" ", $args). "\n";
   }
   public static function __callStatic($name, $args){
      echo "Calling static method $name with " . implode(" ", $args). "\n";
   }
}
$obj = new myclass();
$obj->mymethod("Hello World!");
myclass::mymethod("Hello World!");
?>

ผลลัพธ์

โค้ดด้านบนให้ผลลัพธ์ดังนี้:

Calling object method mymethod with Hello World!
Calling static method mymethod with Hello World!