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'
);
我有一个简单的关联数组声明如下:
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'
);