PHP 全局 $db 调用函数

mak*_*oiz 0 php

我有以下代码:

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);
}
Run Code Online (Sandbox Code Playgroud)

$db 是否可用于 processBatch 函数,以便我可以使用 db 功能,还是必须在 processBatch() 中再次定义它?

Ama*_*ali 5

不,不会的。您将无法访问函数$db内部processBatch(),因为它超出了函数的范围——这意味着 PHP 只能看到函数内部定义的变量。您可以使用global关键字(就像您当前对beginProcess()函数所做的那样)让 PHP 知道该变量超出了函数的作用域,并指示它将变量导入到函数作用域中。

在代码中使用global变量通常被认为是不好的做法,我认为更好的做法是将$db作为函数参数传递到函数中:

function processBatch($db, $batch){
    // $db is now available inside the function
    // more code ...
}
Run Code Online (Sandbox Code Playgroud)

这样,您的代码将更干净且更易于维护。有关变量范围的更多信息,请参阅PHP 手册。