当前位置:  开发笔记 > 编程语言 > 正文

PHP致命错误:无法重新声明课程

如何解决《PHP致命错误:无法重新声明课程》经验,为你挑选了8个好方法。

有谁知道什么会导致这个问题?

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;在两个文件的示例中保持命名空间兼容性.

推荐阅读
ERIK又
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有