แนะนำตัว
การตีความการโอเวอร์โหลดนั้นแตกต่างกันใน 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!