Intro
PHP อนุญาตให้คุณโอเวอร์โหลดการเรียกใช้เมธอดและการเข้าถึงคุณสมบัติโดยการประกาศเมธอดมหัศจรรย์ในคลาส สิ่งนี้ทำให้รหัสเช่น:
class Foo {
public function __get($name) { return 42; }
}
$foo = new Foo;
echo $foo->missingProperty; // prints "42"
นอกเหนือจากการบรรทุกเกินพิกัดเช่นคุณสมบัติและวิธีการตั้งแต่ PHP 5.3.0 เรายังสามารถเกินวิธีการโทรออกโดยวิธีการเอาชนะมายากลstatic
__callStatic
บางสิ่งหายไป
สิ่งที่ขาดหายไปจากฟังก์ชั่นที่มีอยู่อย่างชัดเจนคือความสามารถในการโอเวอร์โหลดคุณสมบัติสแตติกเช่น:
echo Foo::$missingProperty; // fatal error: access to undeclared static property
ข้อ จำกัด นี้เป็นอย่างชัดเจนเอกสาร :
การโอเวอร์โหลดของคุณสมบัติใช้งานได้เฉพาะในบริบทของวัตถุ วิธีการเวทย์มนตร์เหล่านี้จะไม่ถูกกระตุ้นในบริบทคงที่
static
ดังนั้นวิธีการเหล่านี้ไม่ควรได้รับการประกาศ ในฐานะของ PHP 5.3.0static
คำเตือนจะออกถ้าวิธีใดวิธีหนึ่งมากไปมายากลมีการประกาศ
แต่ทำไม
คำถามของฉันคือ:
- มีเหตุผลทางเทคนิคหรือไม่ที่ฟังก์ชั่นนี้ไม่รองรับในปัจจุบัน? หรืออาจเป็นเหตุผลทางการเมือง (สั่น)
- เคยมีความพยายามยกเลิกการเพิ่มฟังก์ชันนี้ในอดีตหรือไม่?
สิ่งสำคัญที่สุดคือคำถามที่ไม่ได้เป็น "วิธีการที่ฉันสามารถมีคุณสมบัติคงที่แบบไดนามิกใน userland PHP?" ที่กล่าวว่าถ้าคุณรู้ว่าการใช้งานที่น่ารักโดยเฉพาะอย่างยิ่งขึ้นอยู่กับ__callStatic
ว่าคุณต้องการแบ่งปันแล้วโดยทั้งหมดทำเช่นนั้น
__getStatic()
และ__setStatic()
ในคลาสคงที่มันจะยังคงมีประโยชน์ที่จะมีฟังก์ชั่นนี้สำหรับการเรียนได้ทันที คุณตระหนักถึงการเคลื่อนไหวในทิศทางนี้หรือไม่?