PHP 5.4 关联数组语法错误

PHP 5.4 associative array giving syntax error

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

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

当我运行对该声明进行语法检查时,我得到以下信息:

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

我做错了什么?

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

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

如果可行 - 添加换行符。某些复制和粘贴魔术搞砸了。

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

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

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

<?php

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

它应该工作得很好(另见 http://3v4l.org/WQGWA)。

我想我明白你的代码是怎么回事了。跟static private没关系。

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

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

如果您在任何十六进制编辑器中查看 copy/pasted 代码,您会注意到奇怪的不可见字符,这些字符令人困惑 PHP。只需做一个干净的 copy/paste 就可以了。

当你在做的时候,检查你的编辑器 configuration/encoding。

编辑: 一个简单的 Unicode 查找表明它是所谓的 EN SPACE 字符(十六进制序列 E2 80 82)。你是如何设法把它放在你的代码中的,我无法理解。

试试这个

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