ข้อความนี้หมายความว่ามีการเรียกวิธีการบางอย่างที่เป็นไปได้ซึ่งอาจล้มเหลวในขณะรันไทม์ สมมติว่าคุณมี
class A { public function foo($a = 1) {;}}
class B extends A { public function foo($a) {;}}
function bar(A $a) {$a->foo();}
คอมไพเลอร์ตรวจสอบเฉพาะการเรียก $ a-> foo () กับข้อกำหนดของ A :: foo () ซึ่งไม่ต้องใช้พารามิเตอร์ อย่างไรก็ตาม $ a อาจเป็นอ็อบเจ็กต์ของคลาส B ซึ่งต้องใช้พารามิเตอร์ดังนั้นการเรียกจะล้มเหลวเมื่อรันไทม์
อย่างไรก็ตามสิ่งนี้ไม่สามารถล้มเหลวและไม่ทำให้เกิดข้อผิดพลาด
class A { public function foo($a) {;}}
class B extends A { public function foo($a = 1) {;}}
function bar(A $a) {$a->foo();}
ดังนั้นไม่มีวิธีใดที่อาจมีพารามิเตอร์ที่ต้องการมากกว่าเมธอดหลัก
ข้อความเดียวกันนี้ยังถูกสร้างขึ้นเมื่อคำแนะนำประเภทไม่ตรงกัน แต่ในกรณีนี้ PHP มีข้อ จำกัด มากกว่า สิ่งนี้ทำให้เกิดข้อผิดพลาด:
class A { public function foo(StdClass $a) {;}}
class B extends A { public function foo($a) {;}}
เช่นนี้:
class A { public function foo($a) {;}}
class B extends A { public function foo(StdClass $a) {;}}
ดูเหมือนจะเข้มงวดกว่าที่ควรจะเป็นและฉันคิดว่าเกิดจากภายใน
ความแตกต่างในการมองเห็นทำให้เกิดข้อผิดพลาดที่แตกต่างกัน แต่ด้วยเหตุผลพื้นฐานเดียวกัน ไม่มีวิธีใดที่สามารถมองเห็นได้น้อยไปกว่าวิธีหลัก
function customMethod( ... )
สำหรับแต่ละฟังก์ชั่นเราสามารถบอกปัญหาที่เฉพาะเจาะจงได้