<?php
//dirname(getcwd());
function generate_salt()
{
$salt = '';
for($i = 0; $i < 19; $i++)
{
$salt .= chr(rand(35, 126));
}
return $salt;
}
...
由于某种原因,我不断收到错误消息:
致命错误:无法重新声明
generate_salt()(先前在
/Applications/MAMP/htdocs/question-air/includes/functions.php中声明过
:5)
in
/Applications/MAMP/htdocs/question-air/includes/functions.php
第13行
我不知道指出为什么或如何发生这种错误。有什么想法吗?
#1 楼
此错误表明您的功能已经定义;这可能意味着:您在两个文件中定义了相同的功能
,或者您在同一文件中的两个地方定义了相同的功能
或该文件其中两次定义了您的函数(因此,似乎两次定义了函数)
为了帮助您解决第三点,一种解决方案是在包含您的函数时使用
include_once
而不是include
functions.php
文件-因此不能多次包含。#2 楼
解决方案1 不要在循环内声明函数(例如
foreach
,for
,while
...)!在它们之前声明。解决方案2
您仅应包含该文件(其中存在该功能)一次。因此,
include ("functions.php");
使用:
include_once("functions.php");
解决方案3
如果以上方法均无济于事,则在函数声明之前添加检查以免重新声明:
if (!function_exists('your_function_name')) {
function your_function_name() {
........
}
}
#3 楼
您可能不止一次包含文件functions.php。#4 楼
您可以先检查函数名称是否不存在,然后再编写函数通过
if (!function_exists('generate_salt'))
{
function generate_salt()
{
........
}
}
或者可以将函数名称更改为另一个名称
#5 楼
就我而言,这是因为另一个函数内部的函数!一旦我移出函数,错误就消失了,一切都按预期进行。此答案说明了为什么不应该在函数内部使用函数。
这可能对某些人有所帮助。
评论
在函数中包含一个函数有什么问题?
– BSUK
16 Dec 9'在16:29
这个答案帮助我
–David Addoteye
18/12/5在3:43
那就是我的问题的解释。
–mach128x
4月2日21:40
#6 楼
当我的* .php.bak(由记事本自动创建)包含在编译中时,我的行为异常。从文件夹中删除所有* .php.bak后,此错误消失了。这对某人可能会有所帮助。
#7 楼
出现该错误的另一个可能原因是您的函数与另一个PHP内置函数的名称相同。例如,function checkdate($date){
$now=strtotime(date('Y-m-d H:i:s'));
$tenYearsAgo=strtotime("-10 years", $now);
$dateToCheck=strtotime($date);
return ($tenYearsAgo > $dateToCheck) ? false : true;
}
echo checkdate('2016-05-12');
其中
checkdate
函数已在PHP中存在。#8 楼
我不喜欢function_exists('fun_name')
,因为它依赖于将函数名称转换为字符串,而且,您必须对其命名两次。可以很容易地因重构而中断。将您的函数声明为lambda表达式(我还没有看到此解决方案):
$generate_salt = function()
{
...
};
因此使用:
$salt = $generate_salt();
然后,在重新执行上述PHP代码时,该函数将简单地覆盖先前的声明。
评论
这真是太好了,您绝对让我度过了<3
– AlexHighHigh
19 Mar 8 '19 at 13:57
@AlexHighHigh很酷,它看起来是如此明显,但是没有人说任何话。
– Staplerfahrer
19 Mar 9 '19 at 22:56
我会在某个时候详细说明它,但是现在我将其保存在我有用的代码片段的lil魔术库中,以便稍后再使用:freshlondon.biz/lambda-expression
– AlexHighHigh
19 Mar 10 '19 at 0:35
#9 楼
我建议您使用get_included_files
-正如Pascal所说,您要么以某种方式查看了错误的文件,要么已在包含的文件中定义了此功能。require_once
对于您正在使用的文件也很有用重新尝试包含是必不可少的。#10 楼
我有同样的问题。最后,它是一个双重包含。一个包含在名为X的文件中,另一个包含在名为Y的文件中。知道在文件Y中我包含了('X')#11 楼
由于您提供的代码未明确包含任何内容,或者包含两次,或者(如果脚本是代码的入口点),则必须在网络服务器config / php.ini中设置自动前缀或者,您已经加载了定义功能的模糊扩展。#12 楼
表示您已经创建了一个同名类。例如:
class ExampleReDeclare {}
// some code here
class ExampleReDeclare {}
第二个ExampleReDeclare引发错误。
#13 楼
如果您遇到Wordpress主题问题,那可能是因为尽管您已在wp_options表中重命名了该主题,但尚未重命名样式表。我为此感到挣扎。#14 楼
我想补充一下我的2分经验,这可能对许多人有帮助。如果在循环(for,foreach和while)中声明一个函数,您将遇到此错误消息。
#15 楼
我最近弹出这个窗口,在同一文件中定义该函数之前先调用了一个函数,并且没有将返回值分配给变量。为要分配的返回值添加一个var可以使错误消失。#16 楼
此错误表明您的功能已经定义;这可能意味着:您在两个文件中定义了相同的功能
,或者您在同一文件中的两个位置中定义了相同的功能
其中两次定义了您的函数(因此,似乎两次定义了函数)
我认为您在包含该文件的脚本的第3位置面临的问题不止一次。您可以通过使用
require_once
而不是require
或include_once
而不是include
来解决此问题,以包括functions.php
文件-因此不能多次包含它。#17 楼
否则无法在循环中创建函数,例如
for($ i = 1; $ i <5; $ i ++)
{
function foo()
{
echo'something';
}
}
//它将显示有关重新声明的错误
评论
胡;我想指出的行号不是“精确”的; ;或者,作为预防措施:您确定要查看“正确的”文件吗?
– Pascal MARTIN
09年12月23日在16:40
这是唯一具有generate_salt()函数的文件。
–渔夫
09年12月23日在16:42
这意味着它可能被多次包含
– Pascal MARTIN
09年12月23日在16:45
是的,我想就是这样-如何解决它,我不知道,因为我对这个项目的设置非常糟糕。我认为应该重新启动。
–渔夫
09年12月23日在16:47
在这种情况下,使用include_once而不是include(和require_once而不是require)通常会有所帮助:这样,PHP本身可以确保文件不被多次包含
– Pascal MARTIN
09年12月23日在16:52