在我的小项目中,一切都运行良好,直到我决定清理一点并将与数据库相关的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";
&GT;
如果我切换了funtion的调用顺序,那么getBiggestMonth()运行正常而另一个则不运行。此外,当所有文件都位于同一个文件夹中时,所有这些工作都很好(函数是类中的静态函数,但这应该不是问题,这里仍存在同样的问题) ,所以我不明白变量范围在这里可能有什么不同,而require_once应该处理其他事情。帮助
答案 0 :(得分:1)
这是因为您使用的是require_once
。它只包含一次配置。您可以将其更改为使用require
,以便它可以按预期工作。
require_once()语句与require()相同,除了PHP 检查文件是否已被包含,如果是,则不包括 (要求)再次。
您正在使用require_once
将文件提取到getEntries()
功能的范围内。 PHP记录了require
d的文件,因此当您在require_once
中调用getBiggestMonth()
时,它知道它已经包含在getEntries()
中。因为已经包含它,所以不再需要该文件,因此您不会在getBiggestMonth()
范围内获取变量。
require_once
与变量无关,它只监视当前PHP进程中包含的文件。
答案 1 :(得分:1)
getEntries()返回后的echo语句显然不会在函数退出后退出。