Php 如何在没有eval()的情况下存储逻辑数据?
我正在开发一个应用程序,允许管理员为他们的商店设置条件,以提供特殊服务。例如:Php 如何在没有eval()的情况下存储逻辑数据?,php,mysql,laravel,eval,Php,Mysql,Laravel,Eval,我正在开发一个应用程序,允许管理员为他们的商店设置条件,以提供特殊服务。例如: if (($cartTotal > 200) && (has_item_in_cart($item))) { // free shipping, % discount, etc } 他们将有一个GUI来设置条件,我想知道如何存储信息。到目前为止,我提出的唯一解决方案是生成if语句并将其作为文本存储在数据库中,然后使用eval()对其进行评估。不过,在公开的应用程序中使用eval(),我还是非常
if (($cartTotal > 200) && (has_item_in_cart($item))) { // free shipping, % discount, etc }
他们将有一个GUI来设置条件,我想知道如何存储信息。到目前为止,我提出的唯一解决方案是生成if
语句并将其作为文本存储在数据库中,然后使用eval()
对其进行评估。不过,在公开的应用程序中使用eval()
,我还是非常犹豫。还有其他选择吗
如果有可用的软件包,它将使用Laravel。您可以使用类似Symfony的表达式语言:
至少比eval安全多了!:) 您需要创建自己的解析器,永远不要使用eval
eval()
仅在计算未知方或不合格方提供的字符串时才是危险的。您需要具体化要计算的表达式方案。如果它真的只是简单的ANDIN/ORing和一些预定义的函数调用,那么一个简单的树并在其上循环就可以了另外,当传入代码由管理员定义时,eval
非常适合。建议noobs避免eval
。任何更精通的人都会意识到,这是将脚本与编译语言分开的一个特性。因为模因而排除它是不聪明的。(顺便说一句,eval
和include
都是一样的。)eval仍然有很大的缺点,即使您可以保证表达式的值,尤其是如果计算的代码中有错误,我将试一试!)