ปัญหาการใช้งาน method_exists แล้วขึ้น error 404

ปัญหาเริ่มต้นก็คือเมื่อเปิดไปยังหน้าหนึ่งของเพจ แล้ว Server แสดง Error 404 Page Not Found (บน Server ที่มีปัญหา (cPanel PHP5.3) แสดง Error 500 แต่จากการตรวจสอบถึงค่าที่แท้จริงพบว่ามันคืน Error 404 กลับมา) ทั้งๆที่ไฟล์ที่เปิดก็มีอยู่จริง จากการตรวจสอบสารพัดวิธีพบว่ามัน Error ที่บรรทัดนี้
if (method_exists($className, 'index')) {
  // to do
}

ฟังก์ชั่นนี้มันจะทำการตรวจสอบว่ามี class และ method ที่ต้องการหรือไม่
แต่โชคร้ายที่ใน PHP5.3 มันคืน Error 404 มาแทนหากไม่พบ class (แต่ใน PHP5.4 ขึ้นมาไม่พบปัญหานี้)

การแก้ไข
ปัญหาก็คือ ฟังก์ชั่นนี้จะคืนค่า 404 หากไม่พบคลาส ดังนั้นวิธีการแก้ปัญหาคือ ใช้การทดสอบว่ามีไฟล์ที่บรรจุคลาสหรือไม่ ก่อนจะเรียกฟังก์ชั่นนี้
if (file_exists('path/to/file.php')) {
  include 'path/to/file.php';
  if (method_exists($className, 'index')) {
    // to do
  }
}

อีกวิธีคือใช้ฟังก์ชั่น class_exists() เพื่อทดสอบว่ามีคลาสหรือไม่ก่อน
if (class_exists($className) && method_exists($className, 'index')) {
  // to do
}

หมายเหตุ วิธีข้างต้นนี้เป็นการทดสอบคลาสที่โหลดด้วย autoloaders เท่านั้น
ผู้เขียน goragod โพสต์เมื่อ 07 ก.ย. 2559 เปิดดู 2,693 ป้ายกำกับ PHP
^