Heim >Backend-Entwicklung >PHP-Tutorial >Schwerwiegender Fehler: Neudeklaration nicht möglich
Wenn es in der interaktiven PHP-Umgebung bereits eine solche Definition gibt:
<code>function a(){ return 'a'; } </code>
Jetzt habe ich festgestellt, dass die Originalschrift falsch war und geändert werden muss
<code> function a(){ return 'b'; } </code>
Zu diesem Zeitpunkt wird ein Fehler gemeldet: Schwerwiegender Fehler: Neudeklaration nicht möglich
Wenn Sie
definieren<code>$b=1;</code>
Ändern Sie es erneut
<code>$b=2;</code>
PHP wird niemals einen Fehler melden, der besagt, dass b definiert wurde und nicht erneut deklariert werden kann
Entschuldigung, was ist der Grund dafür, dass die Funktion so entworfen wurde, dass sie nicht erneut deklariert werden kann?
Ich habe Ihre Antworten gelesen und festgestellt, dass dieses Problem tatsächlich sehr häufig vorkommt. Es wird beim Debuggen zu Problemen führen. Ich weiß nicht, wie Sie es in einer echten Projektumgebung lösen können.
Betrachten wir das Projektszenario. Sie schreiben eine Funktion, um eine Funktion in einem Zug abzuschließen.
Wir importieren es, require('myfun.php') und stellen nach der Verwendung fest, dass wir es ändern müssen. Sie öffnen myfun.php und nehmen Änderungen vor. Schließen Sie die letzte PHP-Datei. eine Umgebung und starten Sie php -a neu und importieren Sie dann require('myfun.php').
Wenn Sie die php -a-Umgebung nicht schließen (oder beenden) und die geänderte myfun.php erneut importieren, wird sofort ein Fehler gemeldet: Schwerwiegender Fehler: Neudeklaration nicht möglich.
Diese Funktion der PHP-Sprache verursacht Probleme beim Debuggen. Gibt es schnelle Methoden?
Wenn es in der interaktiven PHP-Umgebung bereits eine solche Definition gibt:
<code>function a(){ return 'a'; } </code>
Jetzt habe ich festgestellt, dass die Originalschrift falsch war und geändert werden muss
<code> function a(){ return 'b'; } </code>
Zu diesem Zeitpunkt wird ein Fehler gemeldet: Schwerwiegender Fehler: Neudeklaration nicht möglich
Wenn Sie
definieren<code>$b=1;</code>
Ändern Sie es erneut
<code>$b=2;</code>
PHP wird niemals einen Fehler melden, der besagt, dass b definiert wurde und nicht erneut deklariert werden kann
Entschuldigung, was ist der Grund dafür, dass die Funktion so entworfen wurde, dass sie nicht erneut deklariert werden kann?
Ich habe Ihre Antworten gelesen und festgestellt, dass dieses Problem tatsächlich sehr häufig vorkommt. Es wird beim Debuggen zu Problemen führen. Ich weiß nicht, wie Sie es in einer echten Projektumgebung lösen können.
Betrachten wir das Projektszenario. Sie schreiben eine Funktion, um eine Funktion in einem Zug abzuschließen.
Wir importieren es, require('myfun.php') und stellen nach der Verwendung fest, dass wir es ändern müssen. Sie öffnen myfun.php und nehmen Änderungen vor. Schließen Sie die letzte PHP-Datei. eine Umgebung und starten Sie php -a neu und importieren Sie dann require('myfun.php').
Wenn Sie die php -a-Umgebung nicht schließen (oder beenden) und die geänderte myfun.php erneut importieren, wird sofort ein Fehler gemeldet: Schwerwiegender Fehler: Neudeklaration nicht möglich.
Diese Funktion der PHP-Sprache verursacht Probleme beim Debuggen. Gibt es schnelle Methoden?
Können Sie zuerst das Format ändern?
Bei schwach typisierten Sprachen ist die Überladung von PHP-Funktionen nicht wie allgemeines OOP.
Da die Funktionsüberladung zwei Bedingungen erfüllen muss:
1. Die Anzahl der Funktionsparameter ist unterschiedlich.
2. Die Arten von Parametern sind unterschiedlich.
PHP kann diese beiden Punkte nicht erfüllen. Sie können der Funktion weitere Parameter hinzufügen, was der Übergabe einer zusätzlichen temporären Variablen entspricht. Schwache Typen sind nicht von Natur aus differenziert und können daher nicht durch diese implementiert werden.
http://blog.csdn.net/smartyid...
Funktionen können nicht wiederholt definiert werden – das unterscheidet sich tatsächlich von js. Die Funktion in js ist eigentlich eine Variable und kann daher neu zugewiesen werden. Aber in PHP entspricht eine Funktion nicht einer Variablen, sondern einem Symbol oder einer Konstante. Wahrscheinlich weil wiederholte Definitionen leicht zu Missverständnissen führen können, sind wiederholte Definitionen nicht zulässig.
...Dies ist prozeduraler Code, es gibt kein Konzept der Überladung. .
Die erste Methode plus
if ( ! function_exists('a')) {
<code>function a(){ return 'a'; }</code>
}
Dann schreiben Sie die Einleitung der zweiten Methode vor der ersten. Es scheint, dass dies der einzige Weg ist
Vielen Dank für die Einladung.
Ich habe keine bequemere Methode, vor allem weil nur wenige Leute interaktive Tests verwenden, oder? Es ist nicht mühsam, die PHP-A-Umgebung zu verlassen und erneut aufzurufen...
Es ist eine sehr einfache Testsimulation und Sie können sie beispielsweise https://glot.io/
Es besteht wirklich kein Grund zur Sorge, und es besteht auch kein Grund zur Sorge, ob die Sprache ab dieser Ebene überlastete Funktionen bereitstellt
Gefällt Ihnen besonders die Shell-Umgebung von php -a oder etwas anderes?
Es gibt tatsächlich viele Lösungen für dieses Problem. Wenn Sie das Debuggen in dieser Umgebung als unpraktisch empfinden, bearbeiten Sie eine x.php-Datei und php x.php gibt dann das Ergebnis Ihres geänderten Codes aus einmal. Es spielt eine Debugging-Rolle.
Wenn Sie wirklich eine fortgeschrittenere Debugging-Methode verwenden möchten, können Sie auch xdebug ausprobieren
Erstens unterstützen die meisten Sprachen keine Neudefinition von Methoden, und PHP ist keine Ausnahme.
Zweitens ist Ihre Debugging-Methode wirklich seltsam. Es ist das erste Mal, dass jemand php -a zum Debuggen verwendet. PHP verfügt über verschiedene Debugging-Tools, einschließlich Unit-Tests. .