繁体   English   中英

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函数,因此我可以使用db功能,还是必须在processBatch()中再次定义它?

不,不会。 您将无法在processBatch()函数内访问$db ,因为它不在函数范围之内-这意味着PHP仅可以查看在函数内部定义的变量。 可以使用global关键字(就像您当前对beginProcess()函数所做的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

这是相同的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM