如果是按照例子里面把
(a+b)*c变成($a+$b)*$c,等于是直接修改PHP源代码,让一个PHP脚本修改它自身,然后执行,感觉不可能。如果是要求能够验证表达式的合法性,解读出来,并且直接把值替换进去,然后计算,感觉就是跟做解释器(interpreter)差不多了。

解决方案 »

  1.   

    如果是人工输入的话,那合法性也要验证啊,如果他输入了:(a+b*c 呢,漏了一个括号,或者是 (a+b)/0 呢,除以零。另外受到一条公式:a+(b+c),需要先计算括号内的表达式。就是有点类似解释器的东西,跟论坛里面把 UBB 代码转成 HTML 的原理差不多,不过你这个是数学公式,麻烦点儿。
      

  2.   

    用php来做也是可以的,麻烦点儿。学过编译理论的人做起来估计舒服些。如果 a b c 是固定的几个符号,你还不如直接把 a b c 直接替换成他们的量,然后 echo 出一个 javscript 的 eval 函数。eval 函数好像会直接执行数学表达式的,具体我不记得了。你可以查查相关的例子看看。
      

  3.   


    的确可以用javscript 的 eval 函数.
    因为通过表达式得出结果后,还得继续php处理,所以eval还是有点不足..
      

  4.   

    刚刚发现 php 也有eval这个函数,貌似可以尝试下~!
      

  5.   

    $a = 1;
    $b = 2;
    $c = 3;
    $code = '(a+b)*c';/*任意公式 */$expr = preg_replace("/\b[a-z]\w*/i", "$$0", $code);echo eval("return $expr;");