\

Facebook


วันอังคารที่ 24 กุมภาพันธ์ พ.ศ. 2558

[PHP] วิธีจับ Notice มาเป็น Exception ใน TryCatch


ในภาษาพีเฮชพี Notice กับ Warning ไม่ถือเป็น runtime error ครับ ทำให้เวลาเราครอบด้วย try catch มันก็จะไม่เด้งไปที่ส่วนของ Exception  ex เเต่จะขึ้นข้อความขึ้นมาเเจ้งเตือนแทน ซึ่งส่วนใหญ่ก็คุ้นกับการตั้งค่า error_report() ให้ซ่อนข้อความเหล่านั้นไป

เเต่ถ้าอยากตั้งกฎขึ้นมาใหม่ว่า Notice  ก็ถือเป็น Exception ตัวหนึ่ง(เช่น Undefined index เป็นต้น) ก็ต้องจัดการด้วยฟังชั่น set_error_handler() เองครับ

ซึ่งบทความนี้ ผมจะแนะนำการจัดการ error ด้วยฟังชั่นเราเอง เช่นผมจะนับว่าการไม่เจออินเด็กใน array ถึงว่าผิดพลาด ก็ให้สร้างฟังชั่นนี้ขึ้นมาครับ

function errorHandlerCatchUndefinedIndex($errno, $errstr, $errfile, $errline ) {
    // In case Undefined index
    if (substr($errstr, 0, 16) == 'Undefined index:') {
     throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
   } 
    return false;
}

เเล้วเรียกฟังชั่นด้วยคำสั่งนี้ ก่อนเข้า try

   // Set Notice return Error
   set_error_handler("errorHandlerCatchUndefinedIndex");

หลับจบ catch หรือ finally ใส่คำสั่งนี้เพื่อกลับคืนสู่การตั้งค่า error ปกติของระบบ

   // Restore Error
   restore_error_handler();

หน้าตาโค๊ดจะออกมาประมาณนี้

 set_error_handler("errorHandlerCatchUndefinedIndex");
try{
//do something!!
}catch(Exception $e){
restore_error_handler();
}
restore_error_handler();


อ้างอิง http://stackoverflow.com/questions/3261051/how-to-catch-an-undefined-index-e-notice-error-in-simpletest

ไม่มีความคิดเห็น:

May be like this posts

  • 4 วิธี รับค่าจาก Form ใน ASP.NET MVC แบบมือโปร
    02/08/2017 - 0 Comments
    Form Post คือ โครตพื้นฐานการส่งข้อมูลบนเว็บไซด์แล้ว โดยฟอร์มจะทำหน้าที่สร้าง FormData ขึ้นมาเพื่อ POST…
  • POSTMAN สุดยอดเครื่องมือทดสอบ API
    13/08/2015 - 0 Comments
    หากต้องสร้าง Web API ขึ้นมาสักตัวนึงไว้ให้ลูกค้าหรือVerdor…
  • สร้าง WebApp ด้วย VueJS บน Digital Ocean ตอนที่ 2 : ติดตั้ง nodejs + npm
    18/05/2018 - 0 Comments
    NodeJS คือ JavaScript framework ที่ใช้ทำ back-end ซึ่งในเคสของผม ผมเลือกเพื่อมาเป็นตัว API สำหรับให้…
  • การ add item และคำสั่งเบื้องต้นของ ADO.NET ENTITY DATA MODEL
    01/04/2013 - 0 Comments
    เราสามารถ เชื่อมต่อ Window Application กับ ฐานข้อมูล SQL SERVER 2008 R2 ได้ง่ายๆ…
  • ไม่แปลกใจเลยกับเว็บรัฐบาล SQL Injection กับกรมสรรพกร
    11/01/2017 - 0 Comments
    แค่เข้าไปค้นหาโรงเรียนที่อยู่ในรายชื่อบริจาคแล้วได้สิทธิลดหย่อน…
  • Debug PHP Code ด้วย VS Code 2016 ของฟรีและดีงามจาก Microsoft
    23/11/2016 - 0 Comments
    หากคุณเป็นนักพัฒนาภาษา C# หนึ่งในโปรแกรม Editor ที่มีความสามารถสูงในท้องตลาดและคุณต้องไม่พลาดแน่นอนคือ…
  • สร้าง WebApp ด้วย VueJS บน Digital Ocean ตอนที่ 3 : ติดตั้ง MongoDB บน Debian 8
    19/05/2018 - 0 Comments
    อย่างที่เกริ่นไปก่อนว่าผมใช้ database เป็น NoSQL ซึ่งผมใช้ MondgoDB มาเป็นตัวจัดการฐานข้อมูล…