Feb
27
2008

ลองเล่นกัน 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 ด้วย จะได้ตรวจสอบการทำงาน ว่าทำได้ถูกต้องหรือไม่

Written by Pipo in: PHP | Tags: ,

No Comments »

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress | Aeros Theme | TheBuckmaker.com WordPress Themes