LMLPHP后院

PHP5.2.1和PHP5.5.9之间的差异技术

maybe yes 发表于 2016-10-01 11:35

本文记录下 PHP5.2.1 和 PHP5.5.9 在语言编译方面的一些差异,因为这个差异导致我用低版本的 PHP 在压缩 LMLPHP 代码的时候产生了一些小问题 - 双引号里面的空格被丢失。

TOKEN 的值发生错位,也许是 PHP5.3 之后加入的 namespace 关键字导致的。

// php5.2.1
echo token_name(314); // T_ENCAPSED_AND_WHITESPACE
echo token_name(315); // T_CONSTANT_ENCAPSED_STRING

// php5.5.9
echo token_name(315); // T_ENCAPSED_AND_WHITESPACE
echo token_name(316); // T_CONSTANT_ENCAPSED_STRING

对双引号的解析结果不同,如下字符串

$str = "<IfModule mod_rewrite.c>\r\nRewriteEngine on\r\nRewriteCond %{REQUEST_FILENAME} !-d\r\nRewriteCond %{REQUEST_FILENAME} !-f\r\nRewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]\r\n</IfModule>";

PHP5.2.1 将上面的字符串按照标签解析,解析成很多段,解析出来的 TOKEN 有(314)T_ENCAPSED_AND_WHITESPACE,(307)T_STRING,(312)T_CHARACTER。

PHP5.5.9 直接将双引号解析成(316)T_CONSTANT_ENCAPSED_STRING

可以看出,PHP5.5.9 更符合正常人的理解,双引号里面除了特殊变量,其他应该是原样输出的,而 PHP5.2.1 竟然按照标签来解析,实在让人摸不着头脑。

相关文章
2024-04-25 18:26:23 1714040783 0.026892