【问题标题】:How to declare class in namespace from string [duplicate]如何从字符串声明命名空间中的类[重复]
【发布时间】:2012-10-30 19:25:36
【问题描述】:

可能重复:
PHP namespace with Dynamic class name

如何从字符串中声明类?

代码

$name = 'the_class';
require_once $name.'.php';
$class = new \resource\$name();

错误

Parse error: syntax error, unexpected '$name' (T_VARIABLE), expecting identifier (T_STRING)

【问题讨论】:

  • @WesleyMurch:这是不正确的。请参阅下面的一些答案,了解如何正确执行此操作。
  • @drrcknlsn:这太棒了,虽然很丑。我仍然很惊讶为命名空间选择的语法是反斜杠,这几乎是一个普遍的转义字符。
  • @Wesley Murch,它是唯一可用于语法的未使用字符之一。
  • @JasonMcCreary: ★resource★classname() 会更酷。
  • 不能使用其他字符太糟糕了,让解释器简单地识别使用它的上下文。例如,为什么$class = new Resource.Classname(); 会成为一个问题,除非它是编译器的缺点?没有歧义,因为 . 在这种情况下永远无法用于连接(对吗?)。只是一些想法 - 我确信这是有原因的,这真的让我无法理解,而且我已经习惯了反斜杠并且现在几乎喜欢它。

标签: php


【解决方案1】:

您需要dynamically construct the namespace path:

$classPath = '\\resource\\' . $name;
$class = new $classPath;

注意:我喜欢用 literal backslashes 明确表达。

【讨论】:

    【解决方案2】:

    命名空间需要是字符串的一部分:

    $name = 'the_class';
    require_once $name . '.php';
    $className = '\resource\\' . $name;
    $class = new $className();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-05
      • 2019-03-25
      • 2020-12-16
      • 2012-12-27
      • 1970-01-01
      • 1970-01-01
      • 2011-06-14
      相关资源
      最近更新 更多