簡體   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