수식을 구문 분석하고 실행하기 위한 독립형 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의 차이. |
* | a * b | a와 b의 곱. |
/ | a/b | a와 b의 몫. |
in | b의 a | 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 | 사인 |
sqrt | numeric | 제곱근 |
펑 | numeric , numeric | 지수 표현 |
모듈로 | numeric , numeric | 첫 번째 값을 두 번째 값으로 나눈 나머지 |
소문자 | string | 문자열 소문자로 변환 |
대문자 | string | 문자열 대문자로 변환 |
대문자로 쓰다 | string | 문자열의 첫 문자를 대문자로 만들기 |
세다 | string|array | 값이 배열인 경우 배열의 항목 수를 계산합니다. 값이 문자열인 경우 문자열의 문자 수를 셉니다. |
MormatFormulaInterpreterCompiler
클래스의 registerCustomFunction()
메서드를 사용하세요.
사용자 정의 함수는 MormatFormulaInterpreterFunctionsFunctionInterface
구현해야 합니다. 이 인터페이스에는 아래 메소드가 포함되어 있습니다.
일부 사용자는 간단한 계산을 수행하고 이를 최대한 변경할 수 있기를 원할 수 있습니다. 라이브러리를 사용하기 전에 eval
함수를 사용할 수 있습니다. 그러나 이 방법에는 두 가지 주요 단점이 있습니다.
보안. PHP 스크립트는 eval 함수에 의해 평가됩니다. Php는 매우 강력한 언어입니다. 특히 사용자가 악성 코드를 삽입하려는 경우 사용자에게는 너무 강력할 수 있습니다.
복잡성. PHP는 프로그래밍 언어를 이해하지 못하는 사람에게도 복잡합니다. 대신 Excel과 같은 수식을 해석하는 것이 좋을 수 있습니다.