当前位置: 首页 > 面试题库 >

具有动态类名称的PHP名称空间

何松
2023-03-14
问题内容

想知道是否有人在使用新功能通过PHP 5.3对类进行命名空间时是否遇到了此问题。

我正在使用单独的类来生成动态类调用,以在应用程序中定义用户类型。基本上,类定义器采用类型的整数表示形式并解释它们,返回一个包含要用作该用户模型的类名的字符串。

我在全局范围内定义了具有该名称的用户类型的对象模型,但是在Editor名称空间中,该用户的编辑器具有另一个名称相同的对象。由于某些原因,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,并且$definition是“ Baz”,则结果类将是\Foo\Bar\Editor\Baz



 类似资料:
  • 问题内容: 我试图动态创建一个常量名称,然后获取该值。 但是我发现$ constant值仍然包含常量的名称,而不是VALUE。 我也尝试了第二级间接寻址,但这会使它成为变量而不是常量。 有人可以对此有所启发吗? 问题答案: http://dk.php.net/manual/en/function.constant.php

  • 问题内容: 我想获取标记之间的所有内容,但是由于urn:名称空间,我不知道该怎么做。 有任何想法吗? 问题答案: 简短的答案:使用XPath 。这样:将返回 或者,您可以实现一个映射名称空间名称和URI的,并在查询之前在XPath对象上对其进行设置。 看一下这篇博客文章, 更新: 该文章已结束,您可以在webarchive上看到它 解决方案1样本: 解决方案2样本: 编辑 这是一个完整的示例,它可

  • 问题内容: 我知道,Java没有预处理器,因此Java中有些东西或多或少是不可能的。 真的 没有 办法在循环中用动态名称填充这些数组吗?我想要类似的东西: 代替 还是有可以使用的古怪技巧? 问题答案: 我会那样做: 如果要使用该方法:

  • 我已经创建了一个类似上面的类,我希望能够使用相同的类使用'colour'作为这个类的替代,如下面。 有没有一种方法可以简单地创造出来?

  • 在OpenFOAM中,存在一个函数,其名称为exp,表示数学中的幂操作。同时,C++本身也可以进行这个计算,并且函数名称也为exp。这会导致调用的时候,编译器并不知道应该调用OpenFOAM的exp还是C++本身的exp。一种方法是将其中一个exp函数进行改名,比如将OpenFOAM中的exp改成expFoam。但还有更简单的方式。 名称空间专门用于解决上面的问题,它可作为附加信息来区分不同库中相

  • 问题内容: 我正在从源头解析XML文档,并且它们使用自定义名称空间。 例如。当我使用SimpleXML进行解析时,mostix:名称空间元素均未显示或不可访问。可能是一个非常简单的解决方案,但是有什么想法吗? 问题答案: 通常,人们使用children()。