想知道是否有其他人在使用PHP 5.3使用新的命名空间类功能时遇到了这个问题.
我正在使用一个单独的类生成一个动态类调用,用于在我的应用程序中定义用户类型.基本上类定义器采用类型的整数表示并解释它们,返回包含要被调用的类名的字符串作为该用户的模型.
我有一个用户类型的对象模型,在全局范围内定义了该名称,但我在Editor命名空间中为用户编辑器创建了另一个具有相同名称的对象.出于某种原因,PHP不允许我按如下方式进行命名空间动态调用.
$definition = Definer::defineProfile($_SESSION['user']->UserType);
new \Editor\$definition();
Run Code Online (Sandbox Code Playgroud)
相同的语法适用于在全局命名空间中调用全局基本对象模型,并且我在整个应用程序中以可靠的方式使用它.
$definition = Definer::defineProfile($_SESSION['user']->UserType);
new $definition();
Run Code Online (Sandbox Code Playgroud)
这将正确调用动态所需的类.
有没有理由说这两个会有不同的行为,或者在这个庄园中没有实现动态调用命名空间,因为这是一个新功能?是否有另一种方法从另一个命名空间动态调用一个类而不显式地将其名称放在代码中,而是从变量中?
irc*_*ell 75
好吧,只需拼出字符串中的命名空间:
$definition = Definer::defineProfile($_SESSION['user']->UserType);
$class = '\\Editor\\' . $definition;
$foo = new $class();
Run Code Online (Sandbox Code Playgroud)
如果它是子命名空间(如注释中所示),只需在命名空间前加上__NAMESPACE__:
$class = __NAMESPACE__ . '\\Editor\\' . $definition;
Run Code Online (Sandbox Code Playgroud)
因此,如果当前命名空间是\Foo\Bar,并且$definition是"Baz",则生成的类将是\Foo\Bar\Editor\Baz
| 归档时间: |
|
| 查看次数: |
32885 次 |
| 最近记录: |