php - 在 PHP 中使用 'global'

标签 php global scoping

我在这里处于学习模式,对 PHP 非常陌生,所以我正在使用代码示例。 请原谅我在这里使用“全局”,但我想了解 php 变量作用域。

这是 myGlobals.php:

<?php 
     global $db_server;
   // other code not shown
?>

这里是 connectToDb.php:

<?php
      require_once 'myGlobals.php';

      // no declared functions in this file, all inline code
      $db_server = mysql_connect(.....);
      mysql_select_db( "theDatabase", $db_server);
?>

这里是 addDbRecords.php:

<?php
       require_once 'myGlobals.php';

       // other inline code.....
       doAddDeleteRecord($db_server);

function doAddDeleteRecord($db_server)
{
  //global $db_server;

  if( !mysql_query($query, $db_server))
   {
         // handle the error...
   }
 }
?>

这是 index.php:

<?php
      require_once 'myGlobals.php';
      require_once 'connectToDb.php';
      require_once 'addDbRecords.php';

     // this is simplified, just trying to show that everything in inline code
 ?>

问题来了。当我在文件 addDbRecords.php 中调用 doAddDeleteRecord($db_server) 上面,$db_server 无效——它是空的——当我调用 mysql_query(.., $db_server, ...) 时——这是错误消息:

"Warning: mysql_query() expects parameter 2 to be resource, null given in C:\xampp\htdocs\addDbRecords.php on line 29"

所以我尝试在 doAddDeleteRecord() 中使用“全局”声明(上面已注释掉)——没有变化。
mysql_query(...) 仍然失败,$db_server 的值为 NULL。

我知道 mysql_connect(....) 有效,因为其他代码成功地将我的所有记录从我的数据库中提取出来(使用 SELECT)并且现有记录在浏览器中正确显示。

所以在我看来,$db_server 声明为“global”这一事实应该意味着 $db_server 的范围是这样的,一旦 mysql_connect( ...) 被调用——在我所有文件的文件范围内,$db_server 将是到我的数据库的有效连接。

我只是想了解 php 作用域,而不是 OOAD 或其他任何东西(目前)。为什么 $db_server() 在这里为空?

最佳答案

所以,你有:

<?php 
     global $db_server;
   // other code not shown
?>

然后在需要的地方加入:

require_once 'myGlobals.php';
// other inline code.....
doAddDeleteRecord($db_server);

问题是,如果您已经在别处包含了“myGlobals.php”,它就不会包含在这里。所以你不能保证global会被带入作用域。

相反,写:

require 'myGlobals.php';
// other inline code.....
doAddDeleteRecord($db_server);

或者采取更好的方法:

// other inline code.....
doAddDeleteRecord($GLOBALS['db_server']);

关于php - 在 PHP 中使用 'global',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6310411/

相关文章:

PHP preg_split 结果不正确

python - 在函数内更改全局变量

xcode - 如何从一个类访问另一个类的变量? SWIFT代码

python - 从 Python 中的另一个脚本编辑全局变量

javascript - Vue.js 无法在方法中遍历对象

php - 如果从MySql获取的数据小于*number*,则显示这个,否则显示其他内容?

php - 我们的网站托管服务商因过度使用 MySQL 而暂停了我们的服务。有人明白为什么吗?

php - Cakephp 2.0.4 ACL错误

c++ - 双倍为真/假

python - Python 中的词法作用域