A-AA+then

ปัญหาเริ่มต้นก็คือเมื่อเปิดไปยังหน้าหนึ่งของเพจ แล้ว 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 เท่านั้น

PHP

Relate

^