【问题标题】:PHP, new variable class in namespacePHP,命名空间中的新变量类
【发布时间】:2011-12-17 16:50:55
【问题描述】:

我正在试验 PHP 5.3 的命名空间功能,但我不知道如何用命名空间前缀实例化一个新类。

目前工作正常:

<?php
new $className($args);
?>

但是如何在变量类名前面添加我的命名空间呢?以下示例不起作用。

<?php
new My\Namespace\$className($args);
?>

此示例产生:解析错误:语法错误,意外的 T_VARIABLE

【问题讨论】:

    标签: php oop namespaces


    【解决方案1】:

    试试这个:

    $class = "My\Namespace\\$className";
    new $class();
    

    变量$className前必须有两个反斜杠\\才能转义

    【讨论】:

    • 你不需要转义反斜杠吗? "My\\Namespace\\$className";
    • 我不明白...为什么这是必要的?我不得不做同样的事情。 PHP安装有问题吗?
    • 双反斜杠的原因是反斜杠是函数字符,需要自己转义。
    • 有人请解释一下。为什么不使用字符串就无法实例化命名空间类:|很奇怪。
    • @Stichoza 是可能的,但是在询问的问题中,OP 将名称空间与一个没有意义的字符串混合在一起,为什么 php 会期望随机字符串掉入行的中间。 secure.php.net/manual/en/language.namespaces.rules.php
    【解决方案2】:

    我是这样做的:

    $classPath = sprintf('My\Namespace\%s', $className);
    $class = new $classPath;
    

    注意单引号而不是双引号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-26
      • 1970-01-01
      • 2012-08-08
      • 2014-08-12
      • 2010-11-18
      • 1970-01-01
      相关资源
      最近更新 更多