这是一个php bug

时间:2013-01-31 07:35:38

标签: php

为什么这段代码有错误(注意:使用未定义的常量 - 假设''在第5行)

<?
$arr1 = array(
">",
"<",‍‍
);

foreach ($arr1 as $value) {
echo $value;
}

6 个答案:

答案 0 :(得分:5)

这不是错误。您在代码中的特定行中有“不可打印的字符”,这就是您收到通知的原因。看图像,vi永远不会说谎! :P

enter image description here

删除你的代码并从头开始重写(没有复制/粘贴),它会起作用

答案 1 :(得分:4)

documentation

中阅读此内容
  

“在最后一个定义的数组条目之后有一个尾随逗号,虽然不常见,但却是一个有效的语法。”

<?php
    $my_array = array('foo', 'bar', 'bat',);
?>

但是,根据您使用的PHP版本,它可能无效。最好删除尾随逗号,如果数组是静态的并且可以手动更改,而不是eval()和其他代码生成的那些。

所以,你的代码是:

<?
$arr1 = array(
    ">",
    "<" // Removing the trailing comma.
);

foreach ($arr1 as $value) {
    echo $value;
}

但令我印象深刻的是,您使用的PHP版本是什么? Coz,所有不错的版本(PHP 5,6)都可以容忍一个尾随逗号。

此外,您必须在代码中检查 UTF-8 BOM 字符。我通常使用CuteFTP的编辑器来检查它们,甚至Hex编辑器也能很好地完成工作。当我复制你的代码并粘贴它时,我在这里看到了两个字符,请看截图:

这就是导致问题的原因。删除它们,你的代码很好。

答案 2 :(得分:0)

根据您的PHP版本,您的代码有效。不幸的是,你的版本不支持尾随逗号,所以你只需要删除它:

<?
$arr1 = array(
    ">",
    "<"
);

foreach ($arr1 as $value) {
    echo $value;
}

答案 3 :(得分:0)

错误是在数组中的最后一个逗号后面有两个不可见的字符(称为zero width joiner字符,十六进制E2 80 8D)。

将示例中的代码复制并粘贴到文本编辑器中,将光标放在最后一个逗号前面,然后按几次左箭头键。光标应该静止不动。

我不太确定为什么会这样,但修复它应该就像删除它们一样简单:

$arr1 = array('>', '<');

答案 4 :(得分:-1)

我认为错误是您的数组中的逗号。试试这个:

<?
$arr1 = array(
">",
"<"
);

foreach ($arr1 as $value) {
echo $value;
}

答案 5 :(得分:-1)

@Pushpesh我认为在数组末尾使用没有问题 看看这个http://codepad.org/oUj8PwY2