在php中使用’global’

在这里学习模式,对PHP来说很新,所以我正在使用代码示例.
请原谅我在这里使用’global’,但我想了解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无效 – 它为null – 当我调用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()中使用’global’声明(上面已注释掉) – 没有变化.
对于$db_server,MysqL_query(…)仍然失败并带有NULL值.

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

所以在我看来,$db_server声明为’global’的事实应该意味着$db_server的范围是这样的,一旦调用MysqL_connect(…) – 在我的所有文件文件范围内,$db_server将是与我的数据库的有效连接.

我只是想了解PHP范围,而不是OOAD或其他任何东西(现在).为什么$db_server()在这里为null?

解决方法:

所以你有了:

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

并在需要的地方加入:

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

问题是如果你已经在其他地方加入了“myGlobals.PHP”,那么它就不会包括在内.因此,您无法保证将全局纳入范围.

相反,写:

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

或者采取更好的方法

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

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...