PHP嚴重致命錯誤處理:php Fatal error: Cannot redeclare class or function

来源:http://www.cnblogs.com/dytl/archive/2016/11/16/6068356.html
-Advertisement-
Play Games

1、錯誤類型:PHP致命錯誤 Error type: PHP Fatal error Fatal error: Cannot redeclare (a) (previously declared in (b)) in (c) on line (d) 2、錯誤描述: 該錯誤報告表示你正企圖對已經定義過 ...


1、錯誤類型:PHP致命錯誤

Error type: PHP Fatal error

Fatal error: Cannot redeclare (a) (previously declared in (b)) in (c) on line (d)

2、錯誤描述:

該錯誤報告表示你正企圖對已經定義過的函數進行再次定義,其中

a----表示重覆定義的函數名;

b----第一次定義該函數時的文件名稱及行號;

c----第二次定義該函數時的文件名稱;

d----第二次定義該函數時的行號。

3、原因及解決方法:

原因:你連續兩次使用相同名稱來定義一個函數,例如

function myFunction(){}

function myFunction(){}

結果如下

Fatal error:Cannot redeclare myfunction()(previously declared in(path):2)in(path) on line 1

解決:

找到已經聲明過的函數,看看是什麼需要導致你再次定義了它。如果只是單純的忘記之前已經定義過,那麼將其中一個聲明刪除掉就是。比如你的腳本文件排列異常混亂,並且你可能使用了大量的include()之類的函數,這將導致你很難從混亂的代碼當中理清思路。不過,如果你的PHP版本比較新(PHP 5.3.8+)貌似就可以用命名空間來解決那種的確有重覆定義函數必要的情況。

 

4 PHP嚴重致命錯誤處理解決舉例說明如下

 

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是自動載入的我們只要把相同類名找出來然後重命名即可。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 英文文檔: sorted(iterable[, key][, reverse]) Return a new sorted list from the items in iterable. Has two optional arguments which must be specified as ke ...
  • 變數分為哪些 成員變數:類裡面,方法外面定義的變數 + 實例變數:沒有用static修飾的變數,屬於對象;存在期:創建實例~銷毀實例;作用域:與該實例的生存範圍相同 + 類變數:用static修飾的變數,屬於類;存在期:類的準備階段~銷毀該類;作用域:與類的生存範圍相同 局部變數: + 形參:方法簽 ...
  • ...
  • elasticsearch的config文件夾裡面有兩個配置文件:elasticsearch.yml和logging.yml,第一個是es的基本配置文件,第二個是日誌配置文件,es也是使用log4j來記錄日誌的,所以logging.yml里的設置按普通log4j配置文件來設置就行了。下麵主要講解下e ...
  • 個人理解: spring Aop 是什麼:面向切麵編程,類似於自定義攔截操作,支持攔截之前操作@Before,攔截之後操作@After,攔截環繞操作@Around。 什麼情況下使用spring Aop:舉例如下 code案例: applicationContext.xml 配置文件 maven po ...
  • 方法屬於誰 方法要麼屬於類,要麼屬於對象 static修飾的方法屬於類 沒有static修飾的方法屬於對象 方法只能定義在類裡面,不能獨立定義 不能獨立的執行方法,要麼通過類調用,要麼通過方法調用 一個類里,一個方法調用另一個方法,看似沒有調用者,實際上對於非static方法使用this調用,sta ...
  • 一、spring aop execution表達式說明 在使用spring框架配置AOP的時候,不管是通過XML配置文件還是註解的方式都需要定義pointcut"切入點" 例如定義切入點表達式 execution(* com.sample.service.impl..*.*(..)) executi ...
  • 在網上找了很多方法,終於找到了一個,記錄之。 JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.setServiceClass(Service1Soap.class);// 設置請求介面 factory.setA... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...