2011-06-27 116 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."); 
    } 
}