2013-05-29 83 views
1

我創建了一個功能,讓我調試PHP腳本,只要變量($debug)設置爲1不能正常工作PHP函數(呼應字符串,簡單)

function debug($msg) { 
    if ($debug == 1) { 
     echo $msg; 
    } else { 
     return false; 
    } 
} 

這樣,在(前functions.php文件名爲)我的腳本的頂部,我寫:

$debug = 1; 

啓用調試,則:

debug("Function executed: " . $data); 

在某些點,以便我知道字符串值/在這一點上的任何事情,所需的響應是屏幕上顯示的消息。

但是,無論$debug字符串的值是什麼,我都不會看到任何echo'd語句。

這是如何實現的?

+1

如何使用調試器? – zerkms

+0

@zerkms我認爲他的意思是在開發模式而不是生產模式下運行代碼。所以他需要顯示某些信息。他不是指實際的代碼調試:) – itsols

+0

是的,謝謝itsols。對不起,它不是很清楚! – Ben

回答

2

這很難說,因爲你所提供的數據太少。

原因可能是您的$debug變量在函數內部是未知的。由於使用global s不建議,請考慮使用常量define("DEBUG",1);

編輯

我內another question我如何使用一個類做同樣的事情類名稱也全局訪問呈現。

+0

謝謝你的幫助!我已經成功地使用常量重新創建函數。 – Ben

+0

@BenPearlKahan事實上,你也可以檢查一個常量是否存在;使用['defined()'](http://php.net/manual/en/function.defined.php)函數 – Voitcus

5

調試功能不可用,因爲它超出了範圍。您:

  1. 需要把它作爲參數傳遞
  2. 使用global關鍵字把它列入你的函數(灰心)

function debug($msg, $debug){ 
    if($debug==1){ 
    echo $msg; 
} else { 
    return false; 
    } 
} 

function debug($msg){ 
    global debug; 
    if($debug==1){ 
    echo $msg; 
} else { 
    return false; 
    } 

}

+0

謝謝你。該函數的意義在於,我不必註釋掉所有單個'echo'命令,因此將它作爲參數傳遞就會產生相同的問題。爲什麼要建立一個'全球'關鍵字不鼓勵? – Ben

+2

使用全局變量時,單詞'global'本身並不會被阻止。如果在許多項目共享的函數中使用此全局變量,或者在某些情況下未設置全局變量,可能會出現問題。你的函數在邏輯上應該僅僅依賴於你作爲參數傳遞的東西,僅此而已。將來有人可能會使用它,必須知道它的參數是他必須提供的唯一的東西,沒有什麼可做的。 – Voitcus

+0

謝謝你的幫助。我已經成功地使用常量重新創建函數。你的回答很好,謝謝。 – Ben

0

全局變量不能被函數訪問,直到你這樣做。例如:

function debug($msg({ 
    global $debug; 
    etc... 

PS:請不要這樣做。找一個更好的方法。真。

+0

該函數的意義在於,我不必將所有的單個' echo「命令,因此將其作爲參數傳遞會產生相同的問題。你能否提出一個更好的選擇? – Ben

+0

記錄。但是define()會比全局更好。 – markdwhite

0

$調試是你的全局變量,所以它不是在你的函數訪問

0

還有宣佈一個const的可能性,(然後只需確保命名空間是正確的),像這樣:

const debug = true; 
function newPrint($msg) { 
    if (\debug === true) { 
     echo $msg; 
    } else { 
     return false; 
    } 
} 
\newPrint("heey");//will print "heey" 

所以只是不使用變量,但使用常量。