PHP 全局$db调用函数


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 函数,以便我可以使用数据库功能,或者我必须在 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

这是相同的。