"Неустранимая ошибка: невозможно обновить <function>"
У меня есть функция (это именно то, как она появляется, из верхней части моего файла):
<?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) в /Applications/MAMP/htdocs/question -air/includes/functions.php в строке 13
Я не могу понять, почему и как может произойти такая ошибка. Любые идеи?
Ответы
Ответ 1
В этих ошибках указано, что ваша функция уже определена; что может означать:
- у вас есть одна и та же функция, определенная в двух файлах
- или у вас есть одна и та же функция, определенная в двух местах в одном файле
- или файл, в котором определена ваша функция, включается два раза (так, кажется, функция определена два раза)
Чтобы помочь с третьей точкой, решением было бы использовать include_once
вместо include
при включении вашего файла functions.php
- поэтому его нельзя включить более одного раза.
Ответ 2
Решение 1
Не объявляйте функцию внутри цикла (например, foreach
, for
, while
...)! Объявите перед ними.
Решение 2
Вы должны включить этот файл (где эта функция существует) только один раз:
использовать: include_once("functions.php");
вместо: include ("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
У меня было странное поведение, когда мой *.php.bak(который автоматически был создан блокнотом) был включен в компиляцию. После того как я удалил все *.php.bak из папки, эта ошибка исчезла.
Возможно, это будет полезно для кого-то.
Ответ 6
Другой возможной причиной получения этой ошибки является то, что ваша функция имеет то же имя, что и другая встроенная функция 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.
Ответ 7
В моем случае это было из-за функции внутри другой функции! как только я переместил функцию, ошибка исчезла, и все сработало, как ожидалось.
Этот ответ объясняет, почему вы не должны использовать функцию внутри функции.
Это может помочь кому-то.
Ответ 8
Я бы рекомендовал использовать get_included_files
, поскольку Паскаль говорит, что вы либо как-то смотрели на неправильный файл, либо эта функция уже определена в файле, который был включен.
require_once
также полезен, если файл, который вы пытаетесь включить, имеет важное значение.
Ответ 9
Так как код, который вы предоставили, явно не содержит ничего, либо он дважды закрывается, либо (если script является точкой входа для кода), на веб-сервере должна быть установлена автоматическая добавка config/php.ini или, альтернативно, у вас есть действительно неясное расширение, которое определяет функцию.
Ответ 10
У меня была та же проблема. И, наконец, это было двойное включение. Один из них относится к файлу с именем X. И еще один - в файле с именем Y. Зная, что в файле Y у меня есть ( "X" )
Ответ 11
или вы можете создать функцию в цикле
Foo();
// Будет отображаться ошибка, связанная с повторной декларацией
Ответ 12
означает, что вы уже создали класс с тем же именем.
Пример:
class ExampleReDeclare {}
// some code here
class ExampleReDeclare {}
Этот второй примерReDeclare выдает ошибку.
Ответ 13
В этих ошибках указано, что ваша функция уже определена; что может означать:
- у вас есть одна и та же функция, определенная в двух файлах
- или у вас есть одна и та же функция, определенная в двух местах в одном файле
- или файл, в котором определена ваша функция, включается два раза (так, кажется, функция определена два раза)
Я думаю, что ваша проблема на третьей позиции script, включая этот файл, более одного раза. Таким образом, вы можете решить ее, используя require_once
вместо require
или include_once
вместо include
для включения вашего файла functions.php
- поэтому он не может быть включен более одного раза.
Ответ 14
Мне не нравятся function_exists('fun_name')
потому что оно основано на превращении имени функции в строку, плюс, вы должны назвать его дважды. Может легко порвать с рефакторингом.
Объявите вашу функцию как лямбда-выражение (я не видел упомянутое решение):
$generate_salt = function()
{
...
};
И использовать таким образом:
$salt = $generate_salt();
Затем при повторном выполнении указанного кода PHP функция просто перезаписывает предыдущее объявление.