Chinaunix

标题: 这个能否算是PHP的一个BUG? [打印本页]

作者: zr0128    时间: 2015-09-09 16:41
标题: 这个能否算是PHP的一个BUG?
本帖最后由 zr0128 于 2015-09-09 16:42 编辑

今天测试一段正则,如下。

  1. preg_match_all('#(?>\d+)(?!;)#', $c, $m);
复制代码
然后突然又想着测试另外一条正则,于是就把这条复制一行,原有的行就注释掉。

  1. // preg_match_all('#(?>\d+)(?!;)#', $c, $m);
  2. preg_match_all('#(?>\d+)(?!;)#', $c, $m);
复制代码
那么问题来了,运行文件,我发现打注释那行往下的代码原样输出,没有解析。

很奇怪,仔细看那个正则,里边包含了“?>”这个PHP的文件结束符,正常情况下是没有问题的,但
只要包含文件结束符的这行代码一被注释掉(单行注释,多行注释无效),那么被注释掉的代码
之后所有代码就不会解析了。
作者: yakczh_cu    时间: 2015-09-14 17:44
  1. $a="0";

  2. if(empty($a)){
  3.    
  4.     echo "empt";
  5.    
  6. }
复制代码
这个算吗?
作者: yanglei1979    时间: 2015-09-15 13:12
\
加这个转义符号就行了
作者: zr0128    时间: 2015-09-21 17:13
回复 2# yakczh_cu


    两码事儿,你这是函数基本用法的问题。
    我发的是语法解析的问题,看起来无大碍,但也是有问题的。
作者: shang2010    时间: 2015-09-27 08:20
哦,基本功不够啊


作者: happy_fish100    时间: 2015-10-16 08:19
试验了一下,还真是如此。
应该是php解析器bug
作者: os4fun    时间: 2015-10-19 13:21
哦,基本功不够啊
作者: lsstarboy    时间: 2015-12-14 21:54
确实是这样,应该是个bug:

a@test:~ % php aa.php
abcdef
abcdef';
echo 'This is end!';
?>
a@test:~ % cat aa.php
<?php
echo "abcdef\n";
//echo '?>abcdef';
echo 'This is end!';
?>

作者: bleakwind    时间: 2015-12-28 18:22
<?php
// ?>
echo "test..."
?>

其实也不算bug, ?>属于php的解析定界符,这个优先权是要高于一切的,所以你才能在html代码中混写PHP,如果这个定界符要低于其他注释什么的,那会出大问题的.
正则你就要规范一些,特殊字符都要加反斜线.




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2