gpt4 book ai didi

PHP:如何在使用自动加载器时获取所有类

转载 作者:可可西里 更新时间:2023-10-31 22:52:20 25 4
gpt4 key购买 nike

我正在使用 composer 生成自动加载器:

"autoload": {
"psr-4": {
"SomeNamespace\\": "src/SomeDir"
}
}

我需要创建实现特定接口(interface)的所有类的实例。 It's fairly easy但是,当不使用自动加载器时,get_declared_classes() 不能很好地与自动加载器一起使用。它只会在使用自动加载器实例化后列出一个类。

最佳答案

您可以在 get_declared_classes() 函数调用之前使用脏 hack 和 require_once 所有类。

  1. 首先通过 composer dumpautoload --optimize
  2. 将所有类转储到类映射
  3. 现在您可以获取 composer loader 并需要所有文件
    $res = get_declared_classes();
$autoloaderClassName = '';
foreach ( $res as $className) {
if (strpos($className, 'ComposerAutoloaderInit') === 0) {
$autoloaderClassName = $className; // ComposerAutoloaderInit323a579f2019d15e328dd7fec58d8284 for me
break;
}
}
$classLoader = $autoloaderClassName::getLoader();
foreach ($classLoader->getClassMap() as $path) {
require_once $path;
}
  1. 现在您可以再次轻松使用 get_declared_classes(),它会返回 Composer 已知的所有类

附言不要在生产中使用它。

关于PHP:如何在使用自动加载器时获取所有类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36676074/

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