[英]PHP global $db call in function
我有以下代码:
function beginProcess(){
global $db;
$sql = "SELECT last_batch from ".TABLE_STATUS.";";
$lastBatch = $db->Execute($sql);
$lastBatch=(int)$lastBatch->fields['last_batch'];
echo "<BR/>Last Batch = ".$lastBatch;
if ($lastBatch >=1 && $lastBatch <=3 ){
$batch = $lastBatch +1;
}else{
$batch = 1;
}
processBatch($batch);
}
$ db是否可用于processBatch函数,因此我可以使用db功能,还是必须在processBatch()中再次定义它?
不,不会。 您将无法在processBatch()
函数内访问$db
,因为它不在函数范围之内-这意味着PHP仅可以查看在函数内部定义的变量。 您可以使用global
关键字(就像您当前对beginProcess()
函数所做的beginProcess()
)来使PHP知道该变量超出了函数范围-并指示其将变量导入到函数范围内。
通常在代码中使用global
变量被认为是不好的做法,我认为更好的做法是将$db
作为函数参数传递给函数:
function processBatch($db, $batch){
// $db is now available inside the function
// more code ...
}
这样,您的代码将更加整洁和可维护。 有关变量范围的更多信息,请查阅PHP手册 。
是的,您必须在progressBatch function
使用global keyword
,例如,
function processBatch($batch){
global $db;
// your remaining code
}
读取变量范围
或者,您必须在processBatch function
传递$db
,例如,
function processBatch($batch,$db){
// $db available now
// your remaining code
}
并称它为
processBatch($batch,$db);
您需要在使用它的每个函数中重新定义它: http : //php.net/manual/en/language.variables.scope.php
如果您不想要,可以使用
$GLOBALS['db']
代替
global $db;
$db
这是相同的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.