1

我有一个名为 List 的类,这个类有一个静态方法。当我打电话时:

List::method();

出现以下错误:

syntax error, unexpected '::' (T_PAAMAYIM_NEKUDOTAYIM), expecting '('

php 是否认为我想调用本机函数 list()?我必须重命名课程吗?

4

2 回答 2

2

是和不是。list不是函数,而是语言构造。因此,它是一个“保留字”,这意味着在编译期间分词器将对其进行不同的处理。

编译器希望list在语言结构中遵循标记,因此在(它报告时使用 a 。相反,您将其提供给范围运算符,这意味着它会感到困惑。最简单的解决方案是重命名您的类(无论如何它过于通用)或通过将类List放在您自己的命名空间中或通过显式引用全局命名空间来防止命名空间冲突:

\List::method();

从 PHP 5.3 开始,这应该也可以工作——它告诉编译器查看全局命名空间,它会在反斜杠之后自动期望一个类名。

于 2013-05-26T19:02:16.433 回答
1

是的,PHP 尝试调用原生函数
T_PAAMAYIM_NEKUDOTAYIM 意味着意外的双冒号,所以当你重命名类时一切都应该没问题

于 2013-05-26T19:01:36.973 回答