1

我收到此错误:

Fatal error: Cannot redeclare class Logger in C:\xampp\htdocs\Speakom\API\Logger.php on line 3

将我的所有 require_once 更改为 require 后,此错误仍然存​​在。有没有办法防止这个错误?如果我没有require_once,为什么会发生这种情况?

是否有条件语句可用于查询文件是否已包含然后包含它?

4

4 回答 4

3

解决该错误的一种方法是始终像这样声明您的类:

if(!class_exists('ClassName')) {
    class ClassName {
        // ...
    }
}

当然,这并不能解决您多次导入同一个类的根本问题。检查应用程序的逻辑并确定需要它的位置。

require和之间的区别require_once

require 'file1.php';
require 'file1.php';

// versus...
require_once 'file1.php';
require_once 'file1.php';

在第一组中,file1.php将执行两次。在第二个中,它只会执行一次。它真的是那么简单。

如果两者都给您一个错误,那么您尝试包含的文件中可能存在错误。请记住,包含或必需文件中的代码在与包含它的点相同的范围内执行。

于 2012-05-11T16:31:34.920 回答
2

错误在于 require 和 require_once 之间的差异。以前,require_once 语句尝试加载文件一次,任何后续包含都不会执行任何操作。现在您已经更改了它,您需要跟踪您在所有包含中的哪个位置执行了要求。请记住,如果您想要一次,请包含一次,仅此而已。PHP 将其全部保持在全局范围内,因此只要包含树中的一个文件包含该文件,您就不需要将其包含在每个文件中。

于 2012-05-11T16:33:24.150 回答
1

这是因为您有两个名为Logger. 也许您复制粘贴了类文件但忘记更改类名?

于 2012-05-11T16:30:55.623 回答
0

您是否检查过您的代码中实际上没有两个 Logger 类?

检查你的代码

class Logger {}

于 2012-05-11T16:29:38.540 回答