0

我真的不知道我做了什么导致这个异常,但我推断这个问题的发生只是因为我包含了一个 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.phphome.php它上面时会抛出异常。包含core.php在任何其他文件中不会导致错误。

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

4

2 回答 2

4

更改includeinclude_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。

希望这可以帮助。

于 2012-06-19T01:45:23.133 回答
1

这意味着core.php已经加载,例如,其他一些文件包含它,并且home.php包含该文件会导致这种情况。为了防止这种情况,您可以使用include_onceorrequire_once确保一个文件只包含一次。或者您可以确保只包含一次文件。

于 2012-06-19T01:51:07.947 回答