为什么在尝试从函数访问全局变量时会出现未定义的变量错误?

时间:2012-03-12 14:10:34

标签: php

我在php

中编写了如下代码
<?php

  global $server ,$username ,$password ,$database; 
  $server ="localhost:3306";
  $username="user";
  $password="pass";
  $database="dbname";

  function connectToDB()
  {
     mysql_connect($server,$username,$password) or die ("can't connect to server");
     mysql_select_db($database) or die ("can't select database");
  }
?>

但是我无法在我的函数中访问那些变量我的问题是什么?

即使没有全局关键字,我也无法访问这些变量。

4 个答案:

答案 0 :(得分:4)

global表示“从全局范围获取此变量”而不是“在所有函数中使此变量可用”。你在函数内部使用它,而不是在它们之外。

请参阅example in the documentation

<?php

  $server ="localhost:3306";
  $username="user";
  $password="pass";
  $database="dbname";

  function connectToDB()
  {
     // Global used INSIDE function
     global $server ,$username ,$password ,$database; 
     mysql_connect($server,$username,$password) or die ("can't connect to server");
     mysql_select_db($database) or die ("can't select database");
  }
?>

答案 1 :(得分:3)

您必须在函数中声明变量global

function connectToDB() {
    global $server, $username, $password, $database;
    etc...
}

答案 2 :(得分:2)

使用全局变量不是一个好习惯,因为它们可以在意外的位置进行修改,从而导致难以跟踪的错误。更好的方法是将所需的变量传递到函数中,如下所示: -

$server ="localhost:3306";
$username="user";
$password="pass";
$database="dbname";

connectToDB($server, $username, $password, $database);

function connectToDB($server, $username, $password, $database)
{
    mysqli_connect($server,$username,$password) or die ("can't connect to server");
    mysqli_select_db($database) or die ("can't select database");
}

答案 3 :(得分:1)

<?php
function connectToDB()
  {
     global $server ,$username ,$password ,$database; 

     $server ="localhost:3306";
     $username="user";
     $password="pass";
     $database="dbname";

     mysql_connect($server,$username,$password) or die ("can't connect to server");
     mysql_select_db($database) or die ("can't select database");
  }
?>