[英]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.