2011-04-10 107 views
0

我得到這個錯誤:致命錯誤:不能重新聲明類客戶

Fatal error: Cannot redeclare class Customer 

然後,我添加以下代碼:

if (!class_exists('Customer')) { 
    include('include/customer.class.php'); 
} 

爲什麼我仍然得到這個錯誤?

我有一個文件(file1.php),其中聲明瞭Customer()類。

在file1.php我做一個AJAX調用file2.php

在file2.php我再次聲明客戶()類。

在file2.php中,只有1個Customer()類的聲明。

+2

你是否在其他地方包含'include/customer.class.php'? – Twelve47 2011-04-10 10:42:27

+0

你有在別處聲明過的名爲'Customer'的類嗎?這是唯一的方法,這是有道理的。 – 2011-04-10 10:47:49

+0

是的,這就是爲什麼我加入if(!class_exists('Customer')) – 2011-04-10 10:47:53

回答

0

使用include_once()。如果仍然給你一個錯誤,問題是,你的聲明比類文件中多次「包括/ customer.class.php」

http://php.net/include_once

+0

這很難解決問題,因爲'class_exists()'應該已經防止了雙重包含。問題必須在OP代碼中的其他地方。 – 2011-04-10 10:58:52

+0

問題很明顯,他在文件「include/customer.class.php」中多次聲明類Customer,他可能會包含另一個文件或其他任何文件。 使用include_once不僅可以防止類似這樣的未來問題,還可以告訴我們問題在哪裏,如果問題是class_exists函數或他的包含文件 – Ivan 2011-04-10 11:01:50

+1

@Ivan問題更可能是他在其他地方聲明瞭一個名爲'Customer'的類*,這是'include_once'不能防止的東西。 – 2011-04-10 11:06:23

0

的誤差可以通過定義一個類引起的多次,例如:

class Foo() {} 
class Foo() {} // Fatal error 

如果你不知道你的班級有多少次被列入可以兩件事情:

  1. 使用include_once()require_once(),以確保該文件僅需「一次」。
  2. 寫你提供你每次都包括文件代碼:

    if (!class_exists('Customer')) { 
        include('include/customer.class.php'); 
    } 
    

我更喜歡第一個,但。 你的問題是上面描述的問題。必須有一個地方多次宣佈課程。沒有任何代碼很難說哪裏。

下面是一些參考:

1

顯然,由於我發出:

if (!class_exists('Customer')) { 

該類不存在,所以類本身以某種方式自我複製。

我在應用程序的許多其他頁面中使用這個類沒有問題。

我只是刪除了整個事情:

if (!class_exists('Customer')) { 
    include('include/customer.class.php'); 
} 

而且它在某種程度上工作這是preplexing!

  1. 如果該類存在,類文件不應該被列入...
  2. 它不存在,因此,被包含的類。
  3. 一旦列入,它說,它已經包含...

非常,非常奇怪...

那麼,它的工作現在...我想我會離開它是...

5

檢查您的服務器是否像APC一樣運行opcode cacher - 這是導致錯誤的原因。我最近碰到了它。

相關問題