首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP「Fatal error: Cannot redeclare class」原因分析與三種解決方案

     編輯:PHP 相關知識

此錯誤表示同一個類別名稱被定義超過一次。常見於自動載入機制、重複 include、或與內建類別衝突。

原因一:同一檔案重複定義

<?php
class Foo {}
// ... 程式碼 ...
class Foo {} // 錯誤:重複定義
?>

解法

刪除重複定義,或重新命名。防禦性寫法:

if (!class_exists('SomeClass')) {
    class SomeClass {}
}

原因二:重複 include 相同類別檔案

// a.php
include "some_class.php";
include "some_class.php"; // 重複

// b.php
include "a.php";
include "some_class.php"; // 再次包含

解法

全部改用 include_once / require_once,或使用 PSR-4 自動載入器(Composer)完全避免手動 include。

原因三:類別名稱與 PHP 內建類別衝突

<?php
class Com {} // Windows 環境下 COM 為內建類別
?>

驗證方法

建立空檔案僅定義該類別,若報錯即為內建類別。

解法

避免使用過於通用的名稱(Com、DB、User 等),改用具體前綴(App_Com、Project_NameSpace\Com)。

自動載入器下的排查

  • 檢查 spl_autoload_register 註冊的多個載入器是否對同一類別名稱解析到不同檔案。
  • 使用 get_declared_classes() 配合 ReflectionClass::getFileName() 追蹤類別來源。

快速修復腳本(臨時)

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

但根本解決仍是規範命名空間、使用 Composer 自動載入、避免手動 include。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved