由于include()而发生无法解释的异常

时间:2012-06-19 01:43:56

标签: php exception

我真的不知道我做了什么导致这个异常,但我推断出这个问题的发生只是因为我包含了一个PHP脚本。这是它抛出的错误:

[Tue Jun 19 01:33:28 2012] [error] [client 127.0.0.1] PHP Fatal error:  Cannot redeclare sql_connect() (previously declared in core.php:6) in core.php on line 9

以下是sql_connect()

function sql_connect(){
    $a = mysql_connect("localhost", "user", "pass") or die(json_encode(array("failure"=>"SQL CON FAILURE: ".mysql_error()))); // Line 6
    mysql_select_db("whoSync", $a);
    return $a;
} //Line 9

更多背景:core.php实际上并没有运行任何代码,它只是定义了函数。现在这就是为什么它很奇怪:当我在core.php中包含home.php时,它会抛出上面的异常。在任何其他文件中包含core.php 会导致错误。

我对PHP非常好,但我不知道发生了什么。谢谢你的帮助。

2 个答案:

答案 0 :(得分:4)

将您的include更改为include_oncerequire_once

问题是您多次调用/包含一个包含函数的文件。抛出致命错误以防止函数被定义两次。

<强>解释

通过使用* _once,PHP将仅在执行脚本期间包含指定的文件一次。 PHP不支持方法重载(在类范围之外),因为它具有动态特性。像Java这样的语言支持重载/覆盖方法。

假设您有一个名为home.php,about.php和sidebar.php的文件。所有三个文件都调用另一个文件database.php,该文件有一个名为dbhandler()的函数。

已经定义了dbhandler()。如果调用home.php,它引用sidebar.php,那么将调用database.php两次。使用include_once / require_once,如果尚未调用,则只包含database.php。

希望这有帮助。

答案 1 :(得分:1)

这意味着已加载core.php,例如,某些其他文件包含它,home.php包含该文件将导致此问题。为防止出现这种情况,您可以使用include_oncerequire_once来确保文件仅包含一次。或者您可以确保只包含一次文件。