gpt4 book ai didi

php - 在 PHP 中,有没有办法在特定命名空间中获取所有声明的类?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:36:32 25 4
gpt4 key购买 nike

我想获取 PHP 中特定命名空间内所有类的名称。目前,我正在尝试通过反射特定的命名类列表来施展魔法,但我想在事先不知道这些名称的情况下进行。

我试过调用 get_declared_classes(),但出于某种原因,我确实可用的类没有出现。我可以调用 get_declared_classes(),但在列表中看不到 Event,然后立即毫无问题地调用 $x = new Event()。像下面这样的东西,我认为应该会引起问题......

if (! in_array('Event', get_declared_classes())) { $x = new Event(); }

...工作正常。我想知道命名这些类并以这种方式检索是否有助于缓解问题。这可能吗?

编辑:为了澄清起见,让我补充一点,我目前没有使用命名空间,而且我也没有专门尝试从上面列出的代码中获得一些东西。我想要的是获取我声明的所有类的名称。尽管在我调用 get_declared_classes() 之前它们的所有类声明都已被命中,但它们并未全部出现在列表中。我希望命名空间可以帮助解决这个问题。

EDIT2:一些人指出类可能是自动加载的。我通过执行以下操作对此进行了测试。 echo(class_exists('Event')) 返回值 1echo(class_exists('Event', FALSE)) 返回值 0。class_exists 的第二个可选参数是是否自动加载。因此,显然该类正在自动加载。这就是答案。

那么,下一个问题 - 我该如何防止这种情况发生?我使用的框架实际上并没有给我很多低级控制。有没有办法强制自动加载,然后调用 get_declared_classes,或者让 get_declared_classes 先触发自动加载?

最佳答案

你不需要硬编码在代码中,你可以使用变量名:

$class_name = 'Event';
if (!in_array($class_name, get_declared_classes())) {
$x = new $class_name();
};

在此处查看类似的代码:codepad.org/hCLE4ToA .

还有一些类可能不会出现在 get_declared_classes() 的结果中,因为它们可能不会在调用此函数时加载。如果在您尝试实例化它们之后它们被自动加载,则可能是这种情况。在此处查看有关自动加载类的更多信息:php.net/autoload .

它是否回答了您的一些问题?有帮助吗?

关于php - 在 PHP 中,有没有办法在特定命名空间中获取所有声明的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8528624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com