我的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";
}
}
?>
我尝试使用全局,但它没有帮助:(
您目睹了变量范围的问题。默认情况下,函数查找在本地作用域中声明的变量。您可以通过将外部文件中定义的变量声明为 global
来指示函数在全局范围内查找变量:
function foo() {
global $bar, $baz, $qux;
}
假设$bar
、$baz
和$qux
是外部文件中赋值的变量,一旦声明为global
,它们就可以从函数范围内访问。
如果要将包含的文件包装在函数中,则任何变量都将在函数范围内定义。也就是说,它们将成为局部变量,在全局上下文中不可见。
您对此执行的操作取决于您拥有的代码以及您要实现的目标。