想知道其他人在使用 PHP 5.3 命名空间类的新功能时是否遇到过这个问题。
我正在生成一个动态类调用,利用一个单独的类来定义应用程序中的用户类型。基本上,类定义器采用类型的整数表示形式并解释它们,返回一个包含类名的字符串,该类名将被称为该用户的模型。
我有一个用户类型的对象模型,其名称在全局范围内定义,但在编辑器命名空间中,我有另一个与用户编辑器同名的对象。由于某种原因,PHP 不允许我进行命名空间动态调用,如下所示。
$definition = Definer::defineProfile($_SESSION['user']->UserType);
new \Editor\$definition();
相同的语法适用于在全局命名空间中调用全局基本对象模型,并且我在整个应用程序中可靠地使用这种方式。
$definition = Definer::defineProfile($_SESSION['user']->UserType);
new $definition();
这将正确调用动态所需的类。
是否有原因导致两者的行为不同,或者由于这是一项新功能,因此该庄园尚未实现命名空间的动态调用?是否有另一种方法可以从另一个名称空间动态调用类,而无需在代码中显式放置其名称,而是从变量中调用?
好吧,只需拼出字符串中的名称空间即可:
$definition = Definer::defineProfile($_SESSION['user']->UserType);
$class = '\\Editor\\' . $definition;
$foo = new $class();
如果它是子命名空间(如注释中所示),只需在命名空间前面加上__NAMESPACE__
:
$class = __NAMESPACE__ . '\\Editor\\' . $definition;
所以如果当前的命名空间是\Foo\Bar
, and $definition
是“Baz”,结果类将是\Foo\Bar\Editor\Baz
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)