在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']);
标签:php,global,scoping 来源: https://codeday.me/bug/20190530/1187066.html