wake-up-neo.com

"Schwerwiegender Fehler: <Funktion> kann nicht neu deklariert werden"

Ich habe eine Funktion (genau so, wie sie von oben in meiner Datei erscheint):

<?php
//dirname(getcwd());
function generate_salt()
{
    $salt = '';

    for($i = 0; $i < 19; $i++)
    {
        $salt .= chr(Rand(35, 126));
    }

    return $salt;
}
...

Und aus irgendeinem Grund bekomme ich immer den Fehler:

Schwerwiegender Fehler: Reklamieren von .__ nicht möglich. generate_salt () (zuvor deklariert... in /Anwendungen/MAMP/htdocs/question-air/includes/functions.php:5) im /Applications/MAMP/htdocs/question-air/includes/functions.php in Zeile 13

Ich kann nicht herausfinden, warum oder wie ein solcher Fehler auftreten könnte. Irgendwelche Ideen?

27
fishman

Dieser Fehler besagt, dass Ihre Funktion bereits definiert ist. was kann bedeuten:

  • sie haben die gleiche Funktion in zwei Dateien definiert
  • oder Sie haben dieselbe Funktion an zwei Stellen in derselben Datei definiert
  • oder die Datei, in der Ihre Funktion definiert ist, ist zweimal enthalten (so scheint es, als sei die Funktion zweimal definiert)

Um den dritten Punkt zu erleichtern, wäre eine Lösung die Verwendung von include_once anstelle von include , wenn Sie Ihre functions.php-Datei einschließen - es kann also nur einmal eingefügt werden.

60
Pascal MARTIN

Lösung 1

Deklariere keine Funktion innerhalb einer Schleife (wie foreach, for, while...)! Erkläre vor ihnen.

Lösung 2

Sie sollten diese Datei (in der diese Funktion existiert) nur einmal einfügen:
verwenden: include_once("functions.php");
statt: include ("functions.php");

Lösung 3

Wenn keiner der oben genannten Punkte vor der Funktionsdeklaration hilft, fügen Sie eine Prüfung hinzu, um eine erneute Deklaration zu vermeiden:

if (!function_exists('your_function_name'))   {
  function your_function_name()  {
    ........
  }
}
40
T.Todua

Wahrscheinlich enthalten Sie die Datei functions.php mehr als einmal.

5
codaddict

sie können zuerst prüfen, ob der Name Ihrer Funktion nicht existiert oder nicht, bevor Sie functionBy schreiben 

  if (!function_exists('generate_salt'))
{
    function generate_salt()
    {
    ........
    }
}

ODER Sie können den Namen der Funktion in einen anderen Namen ändern 

3
ahmed hamdy

Ein anderer möglicher Grund für das Auftreten dieses Fehlers ist, dass Ihre Funktion denselben Namen wie eine andere PHP eingebaute Funktion hat. Zum Beispiel,

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');

wo die checkdate-Funktion bereits in PHP vorhanden ist.

3
Pawel Glowacki

Ich hatte ein seltsames Verhalten, als mein * .php.bak (das automatisch vom Notizblock erstellt wurde) in die Kompilierung einbezogen wurde. Nachdem ich alle * .php.bak aus dem Ordner entfernt habe, war dieser Fehler nicht mehr vorhanden .. Vielleicht ist dies für jemanden hilfreich.

3
Roman

In meinem Fall war es wegen der Funktion in einer anderen Funktion! Nachdem ich die Funktion ausgezogen hatte, war der Fehler verschwunden, und alles funktionierte wie erwartet. 

Diese Antwort erklärt, warum Sie die Funktion in Funktion nicht verwenden sollten.

Das könnte jemandem helfen.

2

Ich hatte das gleiche Problem. Und schließlich war es ein doppelter Include. Ein Include in einer Datei namens X. Und ein weiteres Include in einer Datei namens Y. Wissen, dass ich in der Datei Y Include ('X') hatte

0
josemaria

Ich mag function_exists('fun_name') nicht, weil es darauf ankommt, dass der Funktionsname in eine Zeichenfolge umgewandelt wird. Außerdem müssen Sie ihn zweimal benennen. Kann leicht mit Refactoring brechen.

Deklarieren Sie Ihre Funktion als Lambda-Ausdruck (Ich habe diese Lösung nicht erwähnt):

$generate_salt = function()
{
    ...
};

Und so verwenden:

$salt = $generate_salt();

Bei der erneuten Ausführung des PHP -Codes überschreibt die Funktion dann einfach die vorherige Deklaration.

0
Staplerfahrer

Da der von Ihnen bereitgestellte Code nichts explizit enthält, wird er entweder zweimal hinzugefügt oder (wenn das Skript der Einstiegspunkt für den Code ist), muss im Webserver config/php.ini ein Auto-Prepend eingerichtet sein oder alternativ haben Sie eine wirklich obskure Erweiterung geladen, die die Funktion definiert.

0
symcbean

Ich würde empfehlen, get_included_files zu verwenden - wie Pascal sagt, sucht man entweder die falsche Datei oder diese Funktion ist bereits in einer Datei definiert, die bereits enthalten ist.

require_once ist auch nützlich, wenn die Datei, die Sie einbinden möchten, unerlässlich ist.

0
John Parker

Dieser Fehler besagt, dass Ihre Funktion bereits definiert ist. was kann bedeuten:

  • sie haben die gleiche Funktion in zwei Dateien definiert
  • oder Sie haben dieselbe Funktion an zwei Stellen in derselben Datei definiert
  • oder die Datei, in der Ihre Funktion definiert ist, ist zweimal enthalten (so scheint es, als sei die Funktion zweimal definiert)

Ich denke, Ihr Problem an der 3. Position des Skripts, das diese Datei enthält, mehr als einmal. So können Sie es lösen, indem Sie require_once anstelle von require oder include_once anstelle von include verwenden, um Ihre functions.php-Datei aufzunehmen - es kann also nur einmal aufgenommen werden.

0
Ameer Hamza

bedeutet, dass Sie bereits eine Klasse mit demselben Namen erstellt haben.

Zum Beispiel:

class ExampleReDeclare {}

// some code here

class ExampleReDeclare {}

Das zweite ExampleReDeclare löst den Fehler aus.

0
Naitik Shah

oder Sie können Funktion in Schleife erstellen

  • sowie 

    für ($ i = 1; $ i <5; $ i ++) { Funktion foo () { echo 'etwas'; } }

foo ();
// Es wird ein Fehler bezüglich der Redeclaration angezeigt

0
rut