Php 如何从字符串在命名空间中声明类

Php 如何从字符串在命名空间中声明类,php,Php,可能重复: 如何从字符串声明类 代码 错误 您需要: 注意:我喜欢显式使用。名称空间需要是字符串的一部分: $name = 'the_class'; require_once $name . '.php'; $className = '\resource\\' . $name; $class = new $className(); @卫斯理默奇:那是不正确的。关于如何正确地做到这一点,请参见下面的一些答案。@drrcknlsn:这太棒了,尽管很难看。我仍然很惊讶为名称空间选择的语法是反斜杠,

可能重复:

如何从字符串声明类

代码 错误 您需要:


注意:我喜欢显式使用。

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

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

@卫斯理默奇:那是不正确的。关于如何正确地做到这一点,请参见下面的一些答案。@drrcknlsn:这太棒了,尽管很难看。我仍然很惊讶为名称空间选择的语法是反斜杠,这几乎是一个普遍的转义字符。@Wesley Murch,它是语法中唯一未使用的字符之一。@JasonMcCreary:
★资源★classname()
会更酷。很遗憾,其他字符不能使用,而让解释器只识别使用它的上下文。例如,为什么
$class=new Resource.Classname()可能是个问题?不存在歧义,因为
在该上下文中不可能用于串联(对吗?)。只是一些想法——我相信这是有原因的,这真的让我不知所措,我已经习惯了反斜杠,现在几乎喜欢它了。
Parse error: syntax error, unexpected '$name' (T_VARIABLE), expecting identifier (T_STRING)
$classPath = '\\resource\\' . $name;
$class = new $classPath;
$name = 'the_class';
require_once $name . '.php';
$className = '\resource\\' . $name;
$class = new $className();