Wie löschst du eine statische variable in PHP nachdem die Rekursion fertig ist?
Also ich habe zum Beispiel eine statische variable innerhalb einer rekursiven Funktion, und ich möchte, dass die variable statisch zu sein, der durch jeden Aufruf der Rekursion, aber nachdem die Rekursion abgeschlossen ist, möchte ich, dass Variablen werden zurückgesetzt, so dass das nächste mal ich verwende die rekursive Funktion es fängt von vorne an.
Zum Beispiel haben wir eine Funktion:
<?php
function someFunction() {
static $variable = null;
do stuff; change value of $variable; do stuff;
someFunction(); # The value of $variable persists through the recursion.
return ($variable);
}
?>
Nennen wir die Funktion zum ersten mal wie diese: someFunction();
und es funktioniert gut. Dann nennen wir es wieder: someFunction();
aber dieses mal beginnt es mit dem vorherigen Wert für $variable
. Wie können wir es zurücksetzen, nachdem die Rekursion das erste mal, dass wir die Funktion aufgerufen, so dass die zweite mal, dass wir es nennen, es ist wie das starten über frisch?
- Ich bin nicht sicher, ob ich Ihre Frage verstehe, aber wenn Sie nicht wollen, dass der Variablen Wert zu bestehen, obwohl die Rekursion dann einfach entfernen Sie die statische.
- Ich will es fortbestehen durch Rekursion... ich will nicht, dass es beibehalten, wenn ich rufen Sie die Funktion manuell, indem Sie es in den Quellcode.
- Dies ist der Grund, warum wir nicht die Verwendung von statischen Variablen für die Rekursion.
- Vielen Dank an alle, die antworteten! Die sind alle schön, aber anders, Arten, die gleiche Sache zu tun. 😉
Du musst angemeldet sein, um einen Kommentar abzugeben.
Prodigitalsons Antwort ist die beste Lösung, aber da du nach einer Lösung gefragt, die Verwendung von statischen Variablen und ich sehe nicht, eine entsprechende Antwort hier ist meine Lösung.
Nur die statische variable auf null, wenn Sie fertig sind. Das folgende druckt 12345 auf beide Anrufe.
Oder kombinieren Sie dies mit der vorherigen Antwort mit einer Initialisierer:
Ausgabe:
null
gegossen, auf 0$variable++
.Die einfachste Sache zu tun ist, übergeben Sie die variable als argument. Ich würde wirklich Durcheinander mit statischem hier.
Als eine Allgemeine Regel, die Sie haben sollten, um der übergabe von Argumenten an die Funktion (es sei denn, Sie operieren auf Klasse Eigenschaften innerhalb der gleichen Klasse)... Sie sollte nicht global sein und im Falle von Rekursion wahrscheinlich nicht eine gute Idee, Sie zu statisch... zu Behandeln, eine Funktion wie eine black-box... Werte gehen in... Sie bekommen Sachen, die mit/an Sie und ein Ergebnis herauskommt. Sie sollten sich bewusst sein, der Dinge, die passieren anderswo. Es gibt einige Ausnahmen, aber IMO sind Sie sehr wenige.
preg_replace_callback
. Beachten Sie, dass Sie wahrscheinlich benötigen, um re-Initialisierung des statischen Zähler innerhalb der callback-zum Beispiel vor dem beenden die Letzte Ersatz.Ok, gut ich sehe prodigitalson squirreled mich auf die Antwort. Hier ist eine demo:
http://codepad.org/4R0bZf1B
Ausgänge:
<homer-simpson>
mmmmm kandierte Pekannüsse</homer-simpson>
Können Sie eine
$depth
Zähler :Ich habe eine Lösung gefunden:
static
mit Stichwortglobal
und es würde funktionieren auf die gleiche =($varset
NULL ist und Sie einen++$variable
Sie Ihre Antwort?