wan*_*est 4 php global scoping
我在这里学习模式,对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
 ?>
这是问题所在.当我doAddDeleteRecord($db_server)在上面的文件addDbRecords.php中调用时,$db_server无效 - 它为null  - 当我调用时mysql_query(.., $db_server, ...)  - 这是错误消息:
"警告:mysql_query()期望参数2为资源,在第29行的C:\ xampp\htdocs\addDbRecords.php中给出null"
所以我尝试使用里面的"全局"声明doAddDeleteRecord()(上面已经说明) - 没有变化.
在mysql_query(...)仍无法与NULL值$db_server.
我知道这些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']);
| 归档时间: | 
 | 
| 查看次数: | 464 次 | 
| 最近记录: |