在我的工作對遺留代碼庫,有一個條件評價其接受用戶輸入,以建立一個條件。然後使用php eval()在運行時評估這個條件。不使用eval解決此問題的最佳方法是什麼?替代關於「的eval()uating」的條件
例如,我在用戶界面中輸入了條件「1> 0」。這必須進行評估並返回結果(在本例中爲true)。有什麼建議麼?
我們知道,如果這個問題似乎含糊其辭,我會試着更好的解釋。
在我的工作對遺留代碼庫,有一個條件評價其接受用戶輸入,以建立一個條件。然後使用php eval()在運行時評估這個條件。不使用eval解決此問題的最佳方法是什麼?替代關於「的eval()uating」的條件
例如,我在用戶界面中輸入了條件「1> 0」。這必須進行評估並返回結果(在本例中爲true)。有什麼建議麼?
我們知道,如果這個問題似乎含糊其辭,我會試着更好的解釋。
的上PHPClasses evalMath parser過提供用於評估這種類型表達的安全框架。
我想說的模式最適合這將是Specification pattern。
在計算機編程中,規範模式是一種特定的軟件設計模式,可以通過使用布爾邏輯將業務邏輯鏈接在一起來重組業務邏輯。
但是,這種方法會要求您爲用戶給出的輸入編寫解析器,以便將條件安全地轉換爲規範實例。根據所允許條件的複雜程度,這可能不是一件容易的事。
您可以通過爲斷言創建帶有create_function
的lambda函數來實現此目的,但這與用戶輸入時使用eval
一樣不安全。
+1似乎很有趣,不確定我是否可以使用它,因爲這可能需要重大更改...感謝無論如何的答案,我會追求它,並看到它導致.. – pinaki 2010-08-18 11:44:55
你可以創建自己的標記生成器,或啓動PHP內置的一個,如果你的條件語法是足夠相似:http://php.net/token-get-all – janmoesen 2010-08-18 11:42:48