gpt4 book ai didi

php - 自定义自动加载与 Composer 的自动加载冲突?

转载 作者:行者123 更新时间:2023-12-02 00:15:04 30 4
gpt4 key购买 nike

我有一个 PHP 项目加载了一个名为 custom_funcs.php 的 Bootstrap 文件,它位于 web 根目录中。该文件包含一堆函数,定义了几个常量,并执行以下操作:

    require dirname( __DIR__ ) . '/lib/php/vendor/autoload.php';
spl_autoload_register( function ($class_name) { include __DIR__ ."/classes/$class_name.php"; });
set_include_path( get_include_path() . PATH_SEPARATOR . SITEROOT );

第一行加载 Composer 自动加载器。 (请注意, Composer 库位于根 Web 目录之外)。第二行告诉我的代码在哪里寻找无法识别的类,这样我就不必经常手动加载我曾经使用过的所有类文件。第三行将 Web 根添加到 PHP 的 PATH。

几年来,它与几个 Composer 包一起工作得很好。

然后...我安装了 PhpUnit。总的来说,我让它工作正常,除了我运行测试时:

  1. 如果没有错误,它会正常工作。
  2. 如果出现错误,我还会收到 PHP 警告:
Warning: include(C:\...path_to_web_root.../classes/SebastianBergmann\Invoker\Invoker.php): failed to open stream: No such file or directory in C:\...path_to_web_root...\common_funcs.php on line 14
Warning: include(): Failed opening 'C:\...path_to_web_root.../classes/SebastianBergmann\Invoker\Invoker.php' for inclusion (include_path='xxxxxxx') in C:\...path_to_web_root...\common_funcs.php on line 14

所以 PhpUnit 正在尝试自动加载一个名为“Invoker”的类,但代码使用的是我自己的自动加载路径,由 spl_autoload_register 设置.

有办法解决这个问题吗?这是 PhpUnit 中的错误吗?

我可以通过在包含行之前使用“@”来隐藏错误,但我会不惜一切代价避免@hiding 错误

注意:我正在加载 custom_funcs.php在通过以下方式进行测试之前:

    public static function setUpBeforeClass(): void {
require 'common_funcs.php';
}

文件结构可能更清晰:

c:/some_path/
..lib/
....php/
......vendor/
........(third-party Composer libraries)
..webroot/
....custom_funcs.php
....classes/
......(namespace)/
........(my custom classes)

我正在使用命名空间:MyCompany\Portal .所以我的自定义类在 <webroot>/classes/MyCompany/Portal/ 中找到

最佳答案

最简单的方法是修复您的自动加载器 - 如果自动加载器无法加载类,则不应抛出此类错误。在这种情况下什么都不做是正确的做法:

spl_autoload_register(function ($class_name) {
if (file_exists(__DIR__ . "/classes/$class_name.php")) {
include __DIR__ . "/classes/$class_name.php";
return true;
}
});

关于php - 自定义自动加载与 Composer 的自动加载冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57224085/

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