【问题标题】:PHP namespace called 'Public'名为“公共”的 PHP 命名空间
【发布时间】:2016-08-15 19:14:37
【问题描述】:

在 Laravel 4 应用程序中,是否可以在命名空间中创建一个名为 Public 的控制器?像这样:

<?php namespace Public;

class MyController extends \BaseController {

}

这样做会给我一个错误:

语法错误,意外的“公共”(T_PUBLIC),需要标识符 (T_STRING) 或 \ (T_NS_SEPARATOR) 或 '{'

但是,如果我将命名空间更改为PublicControllers,它可以正常工作。这是否意味着Public 是不能用作命名空间的保留字?

【问题讨论】:

  • 可以创建一个Public 命名空间,如果你真的尝试的话,但你必须求助于各种hackery 才能让它工作。 (例如,在您使用类名的任何地方,您都需要它是一个包含类名的字符串变量。)不值得。
  • 很想知道为什么这个问题收到了 2 票反对。这是一个明确、具体的问题,并且接受的答案非常有用。有什么问题?
  • 有点晚了,但这里有一个详细的答案,imo 应该是链接器:*.com/a/44225572/2310637

标签: php laravel


【解决方案1】:

public is a reserved word in PHP:

这些词在 PHP 中具有特殊的含义。它们中的一些代表看起来像函数的东西,一些看起来像常量等等——但实际上它们不是:它们是语言结构。您不能使用以下任何单词作为常量、类名、函数或方法名。将它们用作变量名通常是可以的,但可能会导致混淆。

虽然这里没有特别提到命名空间,但我们可以查看the PHP grammar 并看到命名空间应该由T_STRINGs 和T_NS_SEPARATORs(反斜杠)连接而成。由于public 有自己的令牌类型(T_PUBLIC,在您的错误消息中提到),因此不是合适的选择。

请注意,这与 Laravel 无关。

【讨论】: