2012-05-11 40 views
1

我收到此错误require_once错误:需要在PHP

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

改变我所有的require_once要求之后,这个错误仍然存​​在。有没有办法来防止这个错误?为什么会发生,如果我没有require_once?

是否有条件声明,我可以用它来查询文件是否已包含,然后包括它?

+0

只是一个猜测,你有类Logger已经定义和声明。以前在您的代码中的某处。 – gorelative

+0

定义了两次....我扫描了代码..我还没有定义2个记录器类 – Matrix001

+0

该请求困扰我 – Matrix001

回答

0

你有没有检查你实际上没有两个记录器类在你的代码中的任何地方?

检查代码中的

class Logger {}

+0

我用netbeans检查过。它被定义为只有一次..它是所需要的stamuments问题 – Matrix001

1

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

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将被执行两次。在第二个它只会被执行一次。它真的是那么简单。

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

+0

所以如果我需要两次...即使它不是require_once ..异常被抛出..嘿黑客..感谢它已经工作 – Matrix001

+0

如果你需要一个外部文件两次,它只是得到执行两次。如果碰巧是一个类定义,那么这就是你遇到这个问题的地方。有逻辑的工作流程需要多次“需要”相同的文件。 –

+0

那么require和require_once之间的区别是什么?如果我们在代码中放置了两次它们都会抛出错误 – Matrix001

2

这个错误在于require和require_once之间的区别。之前,require_once语句试图加载文件一次以及任何后续包含将不会执行任何操作。现在你已经改变了它,你需要追踪你在做什么的所有内容。记住,如果你想要一次,那就包括一次,就是这样。 PHP将它全部保存在全局中,所以只要包含树中的某个文件包含该文件,就不需要将其包含在每个文件中。