【发布时间】:2018-01-21 04:44:05
【问题描述】:
我有一个引擎,它通过从文件中获取公式、操作数和运算符来执行一些数学和逻辑运算。
所有操作都在eval 范围内执行,最终结果保存在另一个文件中。
这些文件通常通过网络传输,因此我试图通过在操作前后去除所有空格来最小化它们。 据我所知,这件事没有严格的规定,但我偶然发现了这种行为:
$x = 1;
$result = $x++-++$x; // works
$result = $x+++++$x; // fails
$result = $x++ + ++$x; // works again
为什么 PHP 对“+++++”语法感到困惑,但接受“++-++”?如何 “加号”比“减号”好吗?
是否有任何敏感操作员的列表 关于空间?
【问题讨论】:
-
不知道答案,但我希望您真的小心您
eval()的那些输入文件,否则它们会带来巨大的漏洞 -
对 eval 非常非常小心。这似乎是一种混乱的方式,但它仍然是一个有趣的问题。
-
@zerkms 实际上,有一个 PHP 语言规范,但它的存在主要是为了体现原始实现的行为,因此像 HHVM 这样的替代方案可以作为基准。 github.com/php/php-langspec
-
来自
C,当我看到x++-++x之类的东西时,我感到畏缩,这是教科书未定义的行为。 PHP 确定了它的含义吗? -
“我正在尝试通过去除操作前后的所有空格来最小化它们”您是否考虑过使用 GZIP 之类的东西?
标签: php