2

在我的小项目中一切正常,直到我决定清理一下并将与数据库相关的 php 文件移动到他们自己的文件夹中。然后事情变得奇怪了。

我在这里尝试使用两个功能:

function getEntries () {
    require_once("mysqliVariables.php");
    $mysqli = new mysqli($dbHost, $dbUname, $dbPwd, $dbName);           
    $sql = "statement...";
    $result = $mysqli->query($sql) or die($mysqli->error);

    echo $dbHost; // prints host
    return $result;
}

function getBiggestMonth () {
    require_once("mysqliVariables.php");
    $mysqli = new mysqli($dbHost, $dbUname, $dbPwd, $dbName);           
    echo $dbHost; // prints nothing! why?       

    $sql = "statement...";
    $result = $mysqli->query($sql) or die($mysqli->error); // this line does not run, of course.

    return $result;
}

我使用不同文件(和文件夹)中的另一个函数来调用这些函数,如下所示:

function listTasks() {      
    require_once("db/mysqliFunctions.php");

    // Get entries using mysqli.
    $tasks = getEntries();

    echo "<pre>";
    var_dump($tasks);
    echo "</pre>"; // program works fine this far.

    $bm = getBiggestMonth(); // program breaks somehow during this function call.

我的变量在一个 php 文件中,如下所示:

<?php   
$dbHost = "host";
$dbUname = "username";
$dbPwd = "password";
$dbName = "databasename";

?>

如果我切换函数的调用顺序,那么 getBiggestMonth() 运行良好,而另一个则不会。此外,当所有文件都位于同一个文件夹中时,所有这些都可以正常工作(这些函数是类中的静态函数,但这不应该是问题,同样的问题在这里仍然存在),所以我不明白怎么可能变量范围在这里可以不同, require_once 应该处理其他事情。帮助?

4

2 回答 2

1

这是因为您正在使用require_once. 它只会包含一次配置。您可以将其更改为使用require,使其按预期工作。

require_once() 语句与 require() 相同,除了 PHP 将检查文件是否已被包含,如果是,则不再包含(要求)它。

您正在使用require_once将文件拉入getEntries()函数范围。PHP 会记录已被required 放入的文件,因此当您调用它时require_oncegetBiggestMonth()它就知道它已经包含在getEntries(). 因为它已经被包含在内,所以它不再需要该文件,因此您不会在您的getBiggestMonth()范围内获取变量。

require_once与变量没有任何关系,它只是监视已包含在当前 PHP 进程中的文件。

于 2012-03-01T21:11:25.960 回答
1

getEntries() 中返回后的回显语句显然不会工作,因为函数在返回后退出。

于 2012-03-01T21:15:09.780 回答