【问题标题】:use namespace with variable in name使用名称中带有变量的命名空间
【发布时间】:2017-02-26 17:16:47
【问题描述】:

我正在做一些事情,只是练习,我没有那么多经验。我正在使用命名空间,并且我在“App\Core”下命名空间的类中有一个函数,它应该包含另一个具有不同类和命名空间在“App\Diff”下的文件并返回该新类。 即

namespace App\Core;

class Test {
    public function testFunc($file) {
        require_once "../folder/" . $file . ".php";
        return new $file();
    }
}

现在 $file 中的类

namespace App\Diff;

class Test2 {
}

我尝试了类似 return 的方法

new App\Diff . "\{$file()}";

但我收到错误“找不到类 App\Code\App\Diff ...”

【问题讨论】:

  • 如果你在前面加上另一个反斜杠,比如new \App\Diff,会发生什么?
  • 类 App\Diff 未找到。
  • 如何实例化Test 类并调用testFunc()
  • 我从另一个班级调用它。 use App\Core\Test; 并从函数public function function callTest() { $a = $this->b->testFunc('ClassName'); } 中调用它,b 是 Test 类的一个实例

标签: php oop namespaces


【解决方案1】:

正如 frz3993 提到的那样,首先您必须进入全局空间,然后才能访问 \App\Diff 和您的班级。见manual
第二个问题我没有正确的解决方案,但你可以看到 csga5000 link & manual 的最后一个答案

namespace App\Core;

class Test {
    public function testFunc($file) {
        require_once "../folder/" . $file . ".php";
         $f = "\\App\\Diff\\".$file ;
         return new $f;
    }
}

【讨论】:

  • 这确实有效。谢谢,我会阅读并继续我的项目。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-16
  • 1970-01-01
  • 1970-01-01
  • 2012-08-26
  • 1970-01-01
  • 1970-01-01
  • 2015-07-02
相关资源
最近更新 更多