ใน PHP เราไม่สามารถใช้วิธีการมากเกินไปโดยตรงโดยวิธีการที่มีชื่อวิธีเดียวกันและลายเซ็นที่แตกต่างกันเนื่องจาก PHP เป็นชนิดข้อมูลที่อ่อนแอและไม่สามารถแยกความแตกต่างของลายเซ็นได้ดี อย่างไรก็ตามคุณสามารถใช้เมธอด __CALL () ในคลาส PHP เพื่อใช้วิธีการโอเวอร์โหลด เมื่อวิธีการที่ไม่มีอยู่ในชั้นเรียนวิธีการ __call () จะถูกเรียกโดยอัตโนมัติซึ่งอยู่ในรูปแบบของ __call ($ name, $ อาร์กิวเมนต์) โดยที่ $ ชื่อคือชื่อของวิธีการและ $ อาร์กิวเมนต์เป็นพารามิเตอร์ประเภทอาร์เรย์
ตัวอย่างต่อไปนี้คือการใช้วิธีการเกินพิกัด PHP เพื่อสร้างวิธีการรับและตั้งค่าแบบไดนามิก (ในการเขียนโปรแกรมเชิงวัตถุคุณสมบัติในชั้นเรียนจะถูกกำหนดโดยใช้ Get and Set แต่หากมีคุณสมบัติมากเกินไปในชั้นเรียนเช่น 30 ดังนั้นถ้าเราไม่ใช้วิธีการมากเกินไปเราต้องเขียนวิธีการตั้งค่า 30 วิธีและ 30 วิธี
การคัดลอกรหัสมีดังนี้:
<? php
คนชั้นเรียน
-
ชื่อส่วนตัว $;
อายุส่วนตัว $;
ที่อยู่ส่วนตัว $;
โรงเรียนส่วนตัว $;
ส่วนตัว $ phonenum;
ฟังก์ชั่นสาธารณะ __CALL ($ method, $ args)
-
$ perfix = strtoLower (substr ($ method, 0,3));
$ property = strtoLower (substr ($ method, 3));
ถ้า (ว่าง ($ perfix) || ว่าง ($ $))
-
กลับ;
-
if ($ perfix == "get" && isset ($ this-> $ property))
-
ส่งคืน $ this-> $ คุณสมบัติ;
-
if ($ perfix == "set")
-
$ this-> $ property = $ args [0];
-
-
-
$ p = คนใหม่ ();
$ p-> setName ('lvcy');
$ p-> setage (23);
$ p-> setaddress (เฉิงตู);
$ p-> setSchool ('uestc');
$ p-> setphonenum ('123456');
echo $ p-> getName (). '// n';
echo $ p-> getage (). '// n';
echo $ p-> getAddress (). '// n';
echo $ p-> getSchool (). '// n';
-
ปัญหานี้ได้รับการแก้ไขได้อย่างง่ายดายด้วยวิธี __CALL () แทนที่จะเขียนวิธีการตั้งค่าสำหรับแต่ละคุณสมบัติ