重新定义一个类(在较低的目录中)

时间:2011-06-28 15:10:03

标签: php

我有以下错误

  

致命错误:无法在第5行的/home/content/63/8026363/html/include/user_database.php中重新声明类数据库

链接到该行

  

类数据库

但我没有在任何我能看到的地方重新宣布这一点。

我已经检查了所有包含文件但仍然看不到它。

我现在已将名称更改为user_database1.php,这在我的WHOLE系统中只包含一次,我仍然收到相同的消息!

这只发生在我的root / admin目录中。 当我将文件移动到根目录并将包含文件从../file.php更新到file.php时,它工作得很好。

我无法理解为什么在/ admin目录中使用file.php并使用../包含文件不起作用!

任何人都可以提供这方面的经验吗?或者是一个潜在的解决方案。

我将从相关文件的顶部提供一些代码..

<?php

include("../include/session.php");
include("../include/admin_database.php");

显然这是问题,但我无法理解为什么!

希望有人可以帮忙!

(由于提交了以下很多答案,问题已得到显着更新)

3 个答案:

答案 0 :(得分:3)

如果您将文件包含两次,则会重新声明该文件。请使用include_once()来轻松预防。

如果您不确定该类最初声明的位置,可以使用Reflection API获取文件名和代码行:

$class = 'Database';
if(class_exists($class))
{
  $oRefl = new ReflectionClass($class);
  $message = sprintf('Class %s already defined in %s on line %s.', $class, $oRefl->getFileName, $oRefl->getStartLine);
  throw new DomainException($message);
}

将它放在您定义类Database的行之前,以找出最初定义该类的文件。

答案 1 :(得分:1)

检查php是否已定义名为Database.php的文件。 也许你正在使用一些框架或库。

答案 2 :(得分:1)

您可能已多次包含数据库类,快速解决此问题的方法是将类似内容添加到类的顶部:

if(!class_exists('Database')){
    class Database{
    // so on
}

这可以确保您的课程只定义一次。