2013-11-03 30 views
-1

我有一個名爲「logToFile」功能,我想打電話給它,但PHP是認爲我試圖重新聲明它。我試圖調用一個函數和PHP認爲我試圖重新聲明它

logToFile:

logToFile("$user->username kicked $arg1 for $arg2."); 

請幫助:

function logToFile($msg) { 
$filename = "log.txt"; 
$fd = fopen($filename, "a"); 
$str = "[" . date("Y/m/d h:i:s", mktime()) . "] " . $msg; 
fwrite($fd, $str . "\n"); 
fclose($fd); 

我的函數調用?

+2

你是否有一個右括號? 這個功能是不是在課堂上祕密的?它是在同一個文件中聲明還是包含該文件? – CompuChip

+0

也許你包含了你的函數不止一次的文件? – putvande

+0

如果PHP說你是在重新宣佈它,那麼你這樣做!嘗試更改函數名稱並查看它是否有效。 –

回答

4

那麼,PHP是不愚蠢的。如果PHP說你重新聲明瞭一個函數,那麼你就是。當函數定義出現多次,PHP將拋出一個致命錯誤,類似下面的一個:

Fatal error: Cannot redeclare logToFile() (previously declared in /path/to/script:X) in /path/to/script on line Y

這裏,X是你最初聲明的功能就行了,Y是在您試圖重-declare(不是請致電,如您在問題中所述)的功能。檢查你的代碼找到這條線,並將其刪除。

,避免這樣的錯誤,你可以先檢查功能是否被定義使用function_exists(),然後嘗試將它聲明:

if (!function_exists('logToFile')) { 
    function logToFile($msg) { 
     $filename = "log.txt"; 
     $fd = fopen($filename, "a"); 
     $str = "[" . date("Y/m/d h:i:s", mktime()) . "] " . $msg; 
     fwrite($fd, $str . "\n"); 
     fclose($fd); 
    } 
} else { 
    echo 'Trying to re-declare the function'; 
} 

雖然上述方法將幫助您避免致命的錯誤,我強烈建議你找出你正在重新定義函數的位置並改正它。大多數情況下,這將歸因於包含您的函數的文件的多個包含。在這種情況下,您可以簡單地使用require_once()代替。 PHP將檢查文件是否已包含在內,如果是,則不包括(需要)它。

+2

正是我要寫的! :D –

+0

雖然這會阻止錯誤,但似乎是錯誤的做法。找出你爲什麼試圖首先重新定義該功能,並解決它。 – Barmar

+0

@Barmar:更新了答案:) –

相關問題