PHP5.2.1和PHP5.5.9之间的差异技术
本文记录下 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 竟然按照标签来解析,实在让人摸不着头脑。
相关文章
暂无