php中的require和require_once错误

时间:2012-05-11 16:28:58

标签: php

我收到此错误:

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

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

是否存在可用于查询文件是否已包含在内的条件语句,然后将其包括在内?

4 个答案:

答案 0 :(得分:3)

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

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

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

requirerequire_once之间的差异

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

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

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

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

答案 1 :(得分:2)

错误在于require和require_once之间的差异。之前,require_once语句尝试加载文件一次,任何后续包含都不会执行任何操作。现在您已经对其进行了更改,您需要追踪所有包含的内容。请记住,如果你想要它一次,包括它一次就是这样。 PHP保持全局全局,所以只要你的包含树中的一个文件包含该文件,你就不需要将它包含在每个文件中。

答案 2 :(得分:1)

这是因为你有两个名为Logger的类。也许你有复制粘贴的类文件,但忘了更改类名?

答案 3 :(得分:0)

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

检查您的代码

class Logger {}