PHP全局$ db调用函数

时间:2013-11-18 11:37:32

标签: 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);
}

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

3 个答案:

答案 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
}

阅读Variables Scope

或者您必须在$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

是完全相同的。