PHP 5.4关联数组给出语法错误

时间:2015-07-13 19:52:22

标签: php php-5.4

我有一个简单的关联数组,声明如下:

Parse error: syntax error, unexpected '16' (T_LNUMBER), expecting ']

当我对此声明运行语法检查时,我得到以下内容:

public int MyProperty { get { int value = 0; return value; }}

我在这里做错了什么?

5 个答案:

答案 0 :(得分:6)

在数组元素之前的每一行的开头有一些奇怪的字符(可能是BOM,我没有检查它)(参见http://3v4l.org/ZnqIp)。这些字符是不可见的,因此它们的存在会导致像这样的奇怪错误。

它们以小方块粘贴到Notepad ++中时显示:

Image showing characters in Notepad++

我删除了它们,试试这段代码:

<?php

class Foo {
    static private $foo = [
        16 => 'xyz',
        7 => 'x',
        8 => 'y',
        9 => 'xy'
    ];
}

它应该可以正常工作(另见http://3v4l.org/WQGWA)。

答案 1 :(得分:3)

如果您查看任何十六进制编辑器中的复制/粘贴代码,您会发现奇怪的隐形字符会让PHP感到困惑。只需做一个干净的复制/粘贴,你就可以了。

在您使用它时,请检查您的编辑器配置/编码。

编辑:简单的Unicode查找称其为所谓的EN SPACE字符(十六进制序列E2 80 82)。你如何设法将它放在你的代码中是超出我的。

enter image description here

答案 2 :(得分:1)

我刚试过复制并粘贴您的代码。出于某种原因,我得到了同样的错误。然后删除数组中的所有空格并再次添加空格。现在一切顺利了。不知道为什么会发生这种情况。只是尝试定义像

这样的数组
atsakymai

如果能解决问题 - 添加换行符。一些副本&amp;粘贴魔术搞砸了。

答案 3 :(得分:0)

我想我弄明白你的代码是怎么回事。它与静态私有无关。

我复制了上面的代码并运行了测试并得到了相同的解析错误。我重组了你的数组,似乎你添加了空格而不是标签。我对PHP比较陌生,但我用标签取代了空格,似乎有效。

private static $foo = [
    16 => 'xyz',
    7 => 'x',
    8 => 'y',
    9 => 'xy'
];

答案 4 :(得分:0)

试试这个

private static $foo = array( 
  16 => 'xyz', 
  7 => 'x', 
  8 => 'y', 
  9 => 'xy'
);