php类中使用global,在php中使用’global’

我在这里学习模式,对PHP来说很新,所以我正在使用代码示例.

请原谅我在这里使用’global’,但我想了解php变量范围.

这是myGlobals.php:

global $db_server;

// other code not shown

?>

这是connectToDb.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:

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:

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?

解决方法:

所以你有了:

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']);

标签:php,global,scoping

来源: https://codeday.me/bug/20190530/1187066.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值