我收到此错误:
Fatal error: Cannot redeclare class Logger in C:\xampp\htdocs\Speakom\API\Logger.php on line 3
将所有require_once更改为require后,此错误仍然存在。有没有办法防止这个错误?如果我没有require_once,为什么会这样呢?
是否存在可用于查询文件是否已包含在内的条件语句,然后将其包括在内?
答案 0 :(得分: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
将被执行两次。在第二个它只会被执行一次。它真的很简单。
如果两者都给您一个错误,那么您尝试包含的文件中可能存在错误。请记住,包含或必需文件中的代码在与包含它的点相同的范围内执行。
答案 1 :(得分:2)
错误在于require和require_once之间的差异。之前,require_once语句尝试加载文件一次,任何后续包含都不会执行任何操作。现在您已经对其进行了更改,您需要追踪所有包含的内容。请记住,如果你想要它一次,包括它一次就是这样。 PHP保持全局全局,所以只要你的包含树中的一个文件包含该文件,你就不需要将它包含在每个文件中。
答案 2 :(得分:1)
这是因为你有两个名为Logger
的类。也许你有复制粘贴的类文件,但忘了更改类名?
答案 3 :(得分:0)
您是否检查过代码中的任何地方实际上没有两个Logger类?
检查您的代码
class Logger {}