将函数添加到Script时,PHP不包含文件

时间:2013-12-17 21:58:34

标签: php

我的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";
  }
  }




 ?>

我尝试过全球化,但没有帮助:(

2 个答案:

答案 0 :(得分:0)

如果要将包含文件包装在函数中,则将在函数范围内定义任何变量。也就是说,它们将成为局部变量,并且在全局环境中不可见。

您对此采取的措施取决于您拥有的代码以及您要实现的目标。

答案 1 :(得分:0)

您正在目睹variable scoping的问题。默认情况下,您的函数会查找在 local 范围内声明的变量。您可以通过将外部文件中定义的变量声明为global来指导您的函数在全局范围内查找变量:

function foo() {
    global $bar, $baz, $qux;
}

假设$bar$baz$qux是在外部文件中分配的变量,一旦声明为global,就可以在函数范围内访问它们