2013-11-03 34 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:更新了答案:) –

相关问题