我在这里处于学习模式,对 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/