作者:ERIK又 | 2023-08-28 15:32
有谁知道什么会导致这个问题?
PHP致命错误:无法重新声明课程
AaronLS..
316
您有一个同名的类,不止一次声明.也许通过多个包括.包含其他文件时,您需要使用类似的东西
include_once "something.php";
防止多重夹杂物.这很容易发生,虽然并不总是很明显,因为你可以将一长串文件相互包含在内.
1> AaronLS..:
您有一个同名的类,不止一次声明.也许通过多个包括.包含其他文件时,您需要使用类似的东西
include_once "something.php";
防止多重夹杂物.这很容易发生,虽然并不总是很明显,因为你可以将一长串文件相互包含在内.
@Timo根据我看过的基准测试,如果你有一个包含100,000个include_once的文件,那么只会有大约1秒的显着差异.最好优化数据库访问或其他逻辑,而不是过早优化文件包括使用不合标准的技术,如主包含文件.自动加载功能的性能差异不同.每个功能都不同,并且不可互换.您可以将一个用于另一个,但是有些情况下它们的功能不同.
这真的很有帮助!
[避免include_once](http://toys.lerdorf.com/archives/38-The-no-framework-PHP-MVC-framework.html),它很慢,使用别的东西,比如[autoloading](http:/ /php.net/manual/en/language.oop5.autoload.php):)
@Timo要引用您使用__autoload()链接的页面,不建议将来弃用或删除."
2> whichdan..:
这意味着你已经创建了一个类.
例如:
class Foo {}
// some code here
class Foo {}
第二个Foo会抛出错误.
这个答案没有AaronLS那么有用.我不认为提问者会问这样一个问题,即他是否写过这样一个明显的重复(即使是在相当复杂的情况下).include_once提示有助于澄清PHP的一个不起眼的功能.
只需使用include_once('FooBar.php')来包含您的类.函数的名称是不言自明的.
如果多次定义__construct方法,也可能会发生此错误.
AaronLS的答案要高得多,你可以在这里找到它(http://stackoverflow.com/questions/708140/php-fatal-error-cannot-redeclare-class/708150#708150).
3> Sam..:
当您在页面中多次声明一个类时会发生这种情况.您可以通过使用if语句(如下所示)包装该类来修复它,或者您可以将其放入单独的文件中并使用require_once()
,而不是include()
.
if (!class_exists('TestClass')) {
// Put class TestClass here
}
它是class_exists('TestClass')=== false或!class_exist('TestClass')
在@Jens-AndréKoch注释中,第二个例子中缺少"s" - >它是`class_exists('TestClass')=== false`或`!class_exists('TestClass')`
4> 小智..:
使用include_once();
- 使用此功能,您的代码只会包含一次.
5> 小智..:
如果我们使用php库中的任何内置类,就会发生这种情况.我使用类名作为目录,我得到了同样的错误.如果首先出现错误,请确保您使用的类名不是内置类之一.
6> 小智..:
如果您__construct
多次定义方法,也可能会发生此错误.
这应该是对已经被接受和高度赞同的答案的评论
7> luchaninov..:
有时这是由于PHP的FastCGI中的一些错误而发生的.
尝试重新启动它.在Ubuntu它是:
service php-fastcgi restart
8> Jacob..:
使用autoload
如下所示时我遇到了同样的问题:
在其他课堂上有:
namespace testClassNamespace;
class MyClass1
{
function __construct()
{
echo "MyClass1 constructor";
}
}
解决方案是namespace testClassNamespace;
在两个文件的示例中保持命名空间兼容性.