ลองเล่นกัน eval()
370 viewsคำจำกัดความแบบให้เข้าใจง่ายๆ เลยก็คือ นำข้อความใน string มารันในแบบ PHP ได้ (ถ้าเป็น javascript, ภาษาอื่นๆ ก็ทำงานลักษณะเดียวกัน) ยกตัวอย่างง่ายๆ นะครับ ถ้าเราต้องมีสูตรคำนวณหลายๆ สูตรใน 1 project เราก็อาจจะต้องเขียน function สำหรับใช้แต่ละสูตรเลยทีเดียว
ทำให้ลำบากมากถ้า project นั้นมีสูตรที่ใช้คำนวณเยอะๆ และยิ่งถ้าต้องสามารถเพิ่มเติมสูตรได้ในอนาคตยิ่งไปกันใหญ่ มาดูตัวอย่างง่ายๆ กันเลย
$intN = 10; $strCal = '(($intN-5)^2) + ((10)^2)'; $strCal = preg_replace("/\((.*?)\^(.*?)\)/", "pow($1,$2)", $strCal); echo $strCal; echo "\n"; eval("\$strCal = $strCal;"); echo $strCal;
ผลการรันโปรแกรมด้านบน
pow(($intN-5),2) + pow((10),2) 125
อธิบายการทำงานดังนี้
1. จากตัวอย่างเรามี ค่า input คือ $intN โดยมีสูตรคือ (($intN-5)^2) + ((10)^2)
2. ใน PHP ถ้าจะยกกำลังต้องแปลง ^ ให้เป็น function pow() เสียก่อน ก็เลยใช้ regular expression (preg_replace) เข้าช่วย
3. การ echo รอบแรกเพื่อแสดงสูตรที่เปลี่ยนเป็นค่า pow ไปแล้วและพร้อมทำการคำนวณ
4. eval เป็นการสั่งให้ ตัวแปร $strCal นั้นทำการรับค่าจาก $strCal ตัวที่เป็นสูตรอีกที (พอดีตั้งตัวแปรซ้ำกันจะได้ไม่เปลือง)
5. echo รอบ 2 ก็แสดงผลที่ได้จากการสั่ง eval นั่นเอง
ทีนี้การประยุกต์ใช้เหรอครับ จะมีกี่สูตรก็ไม่สนใจแล้ว เก็บแต่ละสูตรลง database ไปเลย แต่อาจจะต้องมีหน้า ทดสอบการรันสูตรใน backend ด้วย จะได้ตรวจสอบการทำงาน ว่าทำได้ถูกต้องหรือไม่
No Comments »
RSS feed for comments on this post. TrackBack URL