使用名称与变量初始化对象

时间:2017-02-10 12:55:09

标签: php symfony

(使用Symfony框架)我正在尝试初始化像这样的对象

$token = new $provider;其中$providerDropbox且我收到此异常

  

尝试加载课程" Dropbox"来自全局命名空间。   你忘记了"使用"声明?

但是,如果我将代码更改为$token = new Dropbox;,那么它是否有效,问题在哪里?

2 个答案:

答案 0 :(得分:1)

即使您在use语句中声明了public void updateText(View v){ Button btn = (Button) findViewById(v.getId()); String text = btn.getText().toString(); } 类,在该方法中创建类时,您也需要将该类的FQDN作为字符串。
实施例;

Dropbox

答案 1 :(得分:1)

值得一读http://php.net/manual/en/language.namespaces.dynamic.php

  

[...]合格和完全合格之间没有区别   动态类名,函数名或常量名[...]

中的名称

当您通过字符串引用类名时,需要使用完全限定的命名空间来定义它。

在类所属的命名空间前面加上

$class = 'Provider\Namespace\' . $provider;
$class = new $class;
如果你喜欢双引号,也不要忘记反斜杠

$class = "Provider\\Namespace\\$provider";
$class = new $class;

如果它确实存在于同一名称空间中,则只需预先设置php预定义常量

$class = __NAMESPACE__ . '\' . $provider;