程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> Fatal error: Cannot redeclare class 原因分析與解決辦法

Fatal error: Cannot redeclare class 原因分析與解決辦法

編輯:關於PHP編程

我使用的都是php __autoload狀態自動加載類的,今天好好的程序不知道怎麼在運行時提示Fatal error: Cannot redeclare class 了,看是重復定義了類,下面我來分析一下解決辦法。

錯誤提示

Fatal error: Cannot redeclare class ….

從字面來看也很好理解,說明是重復定義了類,找了一下自己的代碼,是因為存在同名的類導致的,修改了類名就好了。

原因分析

1.在同一個文件中重復聲明了兩次同名的類:
例如:

 

 代碼如下 復制代碼 <?php  
class Foo {}  
 
// some code here  
 
class Foo {}  
?> 

在第二個 Foo 的地方就會報錯。

解決:去掉第二個Foo,或者重命名。

為了防止重復定義,可以在定義一個新的類的時候判斷一下這個類是否已經存在:

 

 代碼如下 復制代碼 if(class_exists('SomeClass') != true)  
{  
   //put class SomeClass here  

if(class_exists('SomeClass') != true)
{
   //put class SomeClass here
}


2.重復包含相同的類文件:

例如:對於某個類文件some_class.php,在a.php中

 代碼如下 復制代碼

include "some_class.php"; 
include "some_class.php";

在b.php中

 代碼如下 復制代碼


include "a.php";  
include "some_class.php"; 
include "a.php";
include "some_class.php";

就會報錯。

解決:將上述的include全部替換為include_once

3.該類為PHP類庫中內置的類。

判斷方法:在一個空文件中寫入

 

 代碼如下 復制代碼 <?php  
class Com  
{  
 
}  
?> 

這時候提示Cannot redeclare class Com,說明這個類就是PHP內置的類。不能使用。

另外,要避免使用太大眾化的類名,比如Com,這個類在Linux使用可能是正常的,在Windows環境卻無法運行。


再記一個網上找到的解決方法,可能在某些場合有用,先記著

 代碼如下 復制代碼


if (!class_exists('pageModule')){    
require_once(PATH_site.'fileadmin/scripts/class.page.php');
 }

上面的辦法不適用於使用了php __autoload類加載的方法 ,但己經可以解決辦法問題了,__autoload是自動加載的我們只要把相同類名找出來然後重命名即可。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved