我有一个简单的关联数组,声明如下:
Parse error: syntax error, unexpected '16' (T_LNUMBER), expecting ']
当我对此声明运行语法检查时,我得到以下内容:
public int MyProperty { get { int value = 0; return value; }}
我在这里做错了什么?
答案 0 :(得分:6)
在数组元素之前的每一行的开头有一些奇怪的字符(可能是BOM,我没有检查它)(参见http://3v4l.org/ZnqIp)。这些字符是不可见的,因此它们的存在会导致像这样的奇怪错误。
它们以小方块粘贴到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
)。你如何设法将它放在你的代码中是超出我的。
答案 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'
);