我有以下代码:
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()中再次定义它?
答案 0 :(得分:4)
不,它不会。您将无法访问$db
函数内的processBatch()
,因为它超出了函数的范围 - 这意味着PHP只能看到函数内定义的变量。您可以使用global
关键字(正如您目前正在使用beginProcess()
函数)让PHP知道变量超出了函数的范围 - 并指示它将变量导入函数范围。
在代码中使用global
变量通常被认为是不好的做法,我认为更好的做法是将$db
作为函数参数传递给函数:
function processBatch($db, $batch){
// $db is now available inside the function
// more code ...
}
这样,您的代码将更清晰,更易于维护。有关变量范围的更多信息,请参阅PHP manual。
答案 1 :(得分:1)
是的,您必须在global keyword
中使用progressBatch function
,
function processBatch($batch){
global $db;
// your remaining code
}
或者您必须在$db
中传递processBatch function
,
function processBatch($batch,$db){
// $db available now
// your remaining code
}
并称之为,
processBatch($batch,$db);
答案 2 :(得分:0)
您需要在使用它的每个函数中重新定义它:http://php.net/manual/en/language.variables.scope.php
如果您不想这样,可以使用
$GLOBALS['db']
而不是
global $db;
$db
是完全相同的。