我的PHP脚本中出现了一个非常奇怪的错误。当我在我的脚本中包含外部文件并访问包含文件中的一些变量时,每个东西都可以正常工作。当我在一个函数中包装我的代码并尝试从另一个PHP脚本调用该函数时,我得到一个错误,说某些变量是未声明的(来自所包含文件的那些变量)。因此,当我将我的代码包装在一个函数中时脚本无法找到外部变量,当我不将函数包装在一个函数中时,每个东西都可以工作正常....什么可能导致这个问题?
编辑:
以下是我在以下代码中定义变量的代码:
<?php
/* Database config */
$db_host = 'xxx';
$db_user = 'xxx';
$db_pass = 'xxx';
$db_database = 'xxxr';
/* End config */
$mysqli = new mysqli($db_host, $db_user, $db_pass, $db_database);
// If you are connecting via TCP/IP rather than a UNIX socket remember to add the port number as a parameter.
?>
我想访问$ mysqli
以下是其他代码:
<?php
include "connect.php";
include "push.php";
function findActions($actionID,$userName)
{
$actionID = "X0aUsz7QOC1GCJG9ZnY0UoRWoj35hKFt0LxpwtB8";
$userName = "janne";
$currentDate = date('d/m/Y H:i');
$query = "SELECT * FROM ".$userName."actions WHERE actionID = ?";
if($stmt = $mysqli->prepare($query))
{
$stmt->bind_param('s', $actionID);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($a,$b,$c,$d,$e,$f,$g,$h,$i,$j,$k,$l);
while ($stmt->fetch())
{
$result[] = array($a,$b,$c,$d,$e,$f,$g,$h,$i,$j,$k,$l);
$startDate = strtotime($j);
$endDate = strtotime($i);
$now = time();
if ($now>= $startDate && $now<= $endDate)
{
$message = $e.":\n".$a;
$body['aps'] =
array(
'alert' => $message,
'sound' => 'default'
);
$payload = json_encode($body);
pushMessage($payload);
}
}
}
else
{
echo "Error";
}
}
?>
我尝试过全球化,但没有帮助:(
答案 0 :(得分:0)
如果要将包含文件包装在函数中,则将在函数范围内定义任何变量。也就是说,它们将成为局部变量,并且在全局环境中不可见。
您对此采取的措施取决于您拥有的代码以及您要实现的目标。
答案 1 :(得分:0)
您正在目睹variable scoping的问题。默认情况下,您的函数会查找在 local 范围内声明的变量。您可以通过将外部文件中定义的变量声明为global
来指导您的函数在全局范围内查找变量:
function foo() {
global $bar, $baz, $qux;
}
假设$bar
,$baz
和$qux
是在外部文件中分配的变量,一旦声明为global
,就可以在函数范围内访问它们