我有以下代码:
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 函数,以便我可以使用数据库功能,或者我必须在 processBatch() 中再次定义它?
不,不会。您将无法访问processBatch()
函数内部的$db
,因为它超出了函数的范围 - 这意味着PHP只能看到函数内部定义的变量。您可以使用 global
关键字(就像您当前使用 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
这是相同的。