2011-06-27 148 views
1

今天我在PHP中遇到了一些非常奇怪的錯誤。無法重新聲明class + class not found?

我寫了一個小類A/B測試,並希望我的PHP文件中創建一個新的實例:

if(!class_exists('ab_tester')) include('../lib/php/ab_tester.php'); 
$ab = new ab_tester($user['id']); 

有人會認爲這應該做的伎倆,但PHP的說:

Fatal error: Cannot redeclare class ab_tester in [PATH_TO_PHP]ab_tester.php on line 10 

爲什麼會發生這種情況?

注:行了ab_tester.php 10看起來是這樣的:

class ab_tester { 

如果我離開了包括線路輸出,創造ab_tester的新實例,它吐出:

Fatal error: Class 'ab_tester' not found in [PATH_TO_PHP]returning.php on line 25 

現在我該怎麼做?如果我嘗試導入它,它已經存在,如果我沒有,它會丟失。

+3

在您的類文件中'class ab_tester'是否出現過多次?可能是這樣的... – BoltClock

+0

不,它沒有。然後錯誤不會在文件開始時拋出,我想:/ –

+0

你能告訴我們你的文件的前10行嗎? – Eineki

回答

1

ab_tester.php中前9行代碼包含什麼?

我敢打賭,還有另一種class ab_tester有(或在包括反正)

編輯:

另一種可能的解釋是,你正在做第二的ab_tester.php包括後來的returning.php的代碼。所以,即使你在這一行使用include_once,第二個電話仍然只是一個include ...

+0

不,完全沒有。它包含PHPDoc。 –

+0

第二個猜測是正確的=] –

0

如何:

include_once('../lib/php/ab_tester.php'); 
$ab = new ab_tester($user['id']); 

+0

include_once和include =>一樣,不能重新聲明,等等......我在這些年中沒有看到過這樣的行爲,我使用的是php! –

0

嘗試自動加載類而不是使用includes?

function __autoload($class_name){ 
    $class_name = strtolower($class_name); 
    $path = "../includes/{$class_name}.php"; 
    if(file_exists($path)){ 
     require_once($path); 
    }else{ 
     die("The file {$class_name}.php could not be found."); 
    } 
}