ถ้าเรียนเขียน program มาคงจะคุ้นเคยกับ flowchart การทำงานของของโปรแกรม แต่ในชีวิตการทำงานจริงๆ โดยเฉพาะถ้าเขียน code โดยใช้ framework ต่างๆ จะไม่เป็นเหมือนที่ได้ออกแบบไว้เสมอไป เพราะว่าบางครั้งโปรแกรมจะทำงานให้เราเองโดยที่ไม่ได้สั่ง สาเหตุคือ มีการเรียกใช้ hook หรือ tricker ทำให้เกิด process ที่อาจจะไม่ทราบที่มา หรือต้องมาแก้งานของคนอื่นโดนที่ไม่มีเอกสารให้
นอกจากการใช้วิธี PHP: list included หรือ required ไฟล์ที่ใช้ ถ้าเราใช้ตัว framework ต่างๆ มักจะมีการเตรียม function ในการสร้าง backtrace ไว้ให้ แต่ถ้าไม่มีหรือเป็น code ที่เขียนด้วยตัวเอง ยังสามารถใช้ debug_backtrace ในการค้นหาที่มาที่ไปได้ เช่น
debug.debug_backtrace.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <?php function getBacktrace() { $backtrace = debug_backtrace(); echo '<pre>' , print_r( $backtrace , true), '</pre>' ; fwrite( fopen ( 'logs_debug_backtrace.txt' , 'a+' ), "\n\n" . __FILE__ . ' :' . __LINE__ . "\n\n" . print_r( $backtrace , true)); } function getPhpInfo( $what ) { phpinfo( $what ); /* จะดูว่า ทำไม่ getPhpInfo ถึงทำงาน */ getBacktrace(); } function index() { getPhpInfo(INFO_ENVIRONMENT); } index(); |
เมื่อทดสอบดูจะได้ผลลัพธ์
logs_debug_backtrace.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | Array ( [0] => Array ( [file] => D:\xampp\htdocs\snippets\PHP\debug.debug_backtrace.php [line] => 13 [function] => getBacktrace [args] => Array ( ) ) [1] => Array ( [file] => D:\xampp\htdocs\snippets\PHP\debug.debug_backtrace.php [line] => 18 [function] => getPhpInfo [args] => Array ( [0] => 16 ) ) [2] => Array ( [file] => D:\xampp\htdocs\snippets\PHP\debug.debug_backtrace.php [line] => 21 [function] => index [args] => Array ( ) ) ) |
เพราะว่าเราเขียน function debug_backtrace() ไว้ใน function getBacktrace() อีกชั้น เพื่อที่ความง่ายในการค้นหา flow เมื่อต้องการดูว่า function หรือ class ที่เราสนใจมันมี flow มายังไงก็แค่ไปเรียกใน function ที่สงสัย เราก็จะได้ลำดับการทำงานย้อนกลับไป เราจะได้ทราบทั้งฟังก์ชั้น คลาส บรรทัด ไฟล์ แม้แต่ตัวแปรที่ส่งเข้าไปใน function นั้น ๆ