2010-08-18 2 views
2

내가 작업하고있는 레거시 코드베이스에는 사용자 입력을 받아 조건을 작성하는 조건 평가 기가 있습니다. 이 조건은 PHP eval()을 사용하여 런타임에 평가됩니다. eval을 사용하지 않고이를 해결하는 가장 좋은 방법은 무엇입니까?'eval() uating'조건 대신

예 : 사용자가 UI에 입력 한 "1> 0"조건이 있습니다. 이것은 평가되어야하며 결과 (이 경우 true)가 반환됩니다. 어떤 제안?

문제가 막연한 것처럼 보일 경우 알려 주시면 더 잘 설명하겠습니다.

+0

조건의 구문이 충분히 유사하면 고유 한 토크 나이저를 만들거나 PHP 기본 제공 언어로 시작할 수 있습니다 (http://php.net/token-get-all – janmoesen

답변

2

PHPClasses의 evalMath parser은 이러한 유형의 표현을 평가할 수있는 안전한 프레임 워크를 제공합니다.

+0

+1). 그것을 시도 할거야 .. 파서에 PHP 함수를 전달하면 어떤 생각이 생길까? – pinaki

+0

특별히 수학 함수가 아닌 PHP 함수 (예 : 문자열 조작 등)가 필요한 경우에는 내장 함수 목록 –

+0

에 추가하는 것이 매우 쉽습니다. 그리고 그것을 이끌 수있는 곳을 참조하십시오 ... 빠른 응답 주셔서 감사합니다. – pinaki

1

가장 적합한 패턴은 Specification pattern입니다.

컴퓨터 프로그래밍에서 사양 패턴은 특정 소프트웨어 디자인 패턴으로, 비즈니스 논리를 부울 논리를 사용하여 함께 연결함으로써 비즈니스 논리를 재결합 할 수 있습니다.

그러나이 방법을 사용하면 조건을 사양 인스턴스로 안전하게 변환하기 위해 사용자가 입력 한 구문 분석기를 작성해야합니다. 허용되는 조건의 복잡성에 따라 이는 쉬운 작업이 아닐 수도 있습니다.

어썰트에 대해 create_function으로 람다 함수를 생성하여 동일하게 구현할 수 있지만 사용자 입력과 관련하여 eval을 사용할 때와 마찬가지로 안전하지 않습니다.

+0

+1이 큰 변화를 요구할 수 있기 때문에 나는 그것을 사용할 수 있는지, 흥미롭지는 않습니다 ... 어쨌든 대답을 주셔서 감사합니다, 나는 그것을 추구하고 그것이 어디로 리드 볼 수 있습니다 .. – pinaki