ไลบรารี php แบบสแตนด์อโลนสำหรับการแยกวิเคราะห์และเรียกใช้สูตร
composer require mormat/php-formula-interpreter
ขั้นแรก สร้างอินสแตนซ์ของ MormatFormulaInterpreterCompiler
$ compiler = new Mormat FormulaInterpreter Compiler ();
จากนั้นใช้วิธี compile()
เพื่อแยกวิเคราะห์สูตรที่คุณต้องการตีความ มันจะส่งคืนอินสแตนซ์ของ MormatFormulaInterpreterExecutable
:
$ executable = $ compiler -> compile ( ' 2 + 2 ' );
ในที่สุดก็รันสูตรจากไฟล์ปฏิบัติการ:
$ result = $ executable -> run ();
// $result equals 4
// variables can be used
price + 2
// parenthesis can be used
(1 + 2) * 3
// default functions are available
sqrt(4)
// complex formulas can be used
(((100 * 0.43075) * 1.1 * 1.5) / (1-0.425)) * 1.105
// string are supported
lowercase('FOO')
// arrays are supported
count([2, 3, 4])
// custom functions can be registered
your_function_here(2)
// use the in operator to check if an item is in array
1 in [1, 2, 3] // returns true
// use the in operator to check if a substring is in a string
'Wars' in 'Star Wars'
ค่าตัวเลขอาจเป็นจำนวนเต็มหรือทศนิยมก็ได้
2 // integer
2.30 // float
ใช้เครื่องหมายคำพูดแบบง่ายเพื่อคั่นสตริง
'foobar'
ใช้เครื่องหมายจุลภาคเพื่อคั่นรายการ และใช้วงเล็บเพื่อล้อมรายการ
[1, 2, 3]
ฟังก์ชัน สตริง และการดำเนินการสามารถใช้เป็นรายการของอาร์เรย์ได้
[cos(0), 'foobar', 2 + 2]
มีตัวดำเนินการดังต่อไปนี้:
ตัวดำเนินการ | การใช้งาน | คำอธิบาย |
---|---|---|
+ | ก + ข | ผลรวมของ a และ b |
- | ก - ข | ผลต่างของ a และ b |
* | ก * ข | ผลคูณของ a และ b |
/ | ก / ข | ผลหารของ a และ b |
in | ก ใน ข | ถ้า a เป็นอาร์เรย์ ให้ตรวจสอบว่า b เป็นรายการของ a หรือไม่ ถ้า a เป็นสตริง ให้ตรวจสอบว่า b เป็นสตริงย่อยของ a หรือไม่ |
ตัวดำเนินการ *
, กำลังถูกประเมินก่อน จากนั้นตัวดำเนินการ
+
และ -
คุณยังสามารถบังคับลำดับความสำคัญของนิพจน์ได้โดยใช้วงเล็บเช่นนี้
2 * (3 + 2)
คุณสามารถใช้วงเล็บได้มากเท่าที่คุณต้องการ
2 * (2 * (3 + 2 * (3 + 2)) + 2)
ตัวแปรเป็นเพียงคำในสูตรของคุณดังนี้:
price * rate / 100
ก่อนที่จะรันสูตรใน PHP อย่าลืมใส่ตัวแปรที่จำเป็นทั้งหมดในอาร์เรย์
$ variables = array (
' price ' => 40.2 ,
' rate ' => 12.8
);
$ executable -> run ( $ variables );
ชื่อ | ประเภทที่อนุญาต | คำอธิบาย |
---|---|---|
ปี่ | รับค่าของพาย | |
เพราะ | numeric | โคไซน์ |
บาป | numeric | ไซน์ |
ตารางวา | numeric | รากที่สอง |
ธาร | numeric , numeric | นิพจน์เอ็กซ์โปเนนเชียล |
โมดูโล่ | numeric , numeric | ส่วนที่เหลือของค่าแรกหารด้วยค่าที่สอง |
ตัวพิมพ์เล็ก | string | แปลงเป็นตัวพิมพ์เล็กสตริง |
ตัวพิมพ์ใหญ่ | string | แปลงเป็นตัวพิมพ์ใหญ่สตริง |
ใช้ทุน | string | ทำให้อักขระตัวแรกของสตริงเป็นตัวพิมพ์ใหญ่ |
นับ | string|array | ถ้าค่าเป็นอาร์เรย์ ให้นับรายการในอาร์เรย์ หากค่าเป็นสตริง ให้นับอักขระในสตริง |
ใช้เมธอด registerCustomFunction()
ในคลาส MormatFormulaInterpreterCompiler
ฟังก์ชันแบบกำหนดเองต้องใช้ MormatFormulaInterpreterFunctionsFunctionInterface
อินเทอร์เฟซนี้มีวิธีการดังต่อไปนี้:
ผู้ใช้บางคนอาจต้องการคำนวณง่ายๆ และสามารถเปลี่ยนแปลงได้มากที่สุด ก่อนที่จะใช้ไลบรารี คุณสามารถใช้ฟังก์ชัน eval
ได้ แต่วิธีนี้มีข้อเสียใหญ่สองประการ:
ความปลอดภัย. สคริปต์ PHP กำลังได้รับการประเมินโดยฟังก์ชัน eval PHP เป็นภาษาที่ทรงพลังมาก ซึ่งอาจทรงพลังเกินไปสำหรับผู้ใช้ โดยเฉพาะอย่างยิ่งเมื่อผู้ใช้ต้องการแทรกโค้ดที่เป็นอันตราย
ความซับซ้อน PHP ยังซับซ้อนสำหรับผู้ที่ไม่เข้าใจภาษาการเขียนโปรแกรม การตีความสูตรที่คล้ายกับ Excel แทนอาจเป็นเรื่องดี