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


why do I get undefined variable error while trying to access a global vairable from a function?

我在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");
  }
?>

但是我不能访问函数中的那些变量,我的问题是什么?

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

global的意思是"从全局范围获取此变量",而不是"使此变量在所有函数中可用"。你在函数内部使用它,而不是在函数外部使用它。

参见文档中的示例

<?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");
  }
?>

您必须在函数内部声明全局变量:

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

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

$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");
}
<?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");
  }
?>