Workaround für unset($this) - Variablenname des akt. $this ausl.
Munshta
- php
2 Sven Rautenberg0 munsh
hi,
ich weiß, der Titel hört sich etwas verwirrend an, ab ich kann es mit einer 64-Zeichen-Beschränkung nicht besser formulieren.
Ich will eine Methode schreiben, die die aufrufende Instanz verstört. Da auf meinem Server 5 installiert ist und es ja in dieser Version verboten ist unset($this);
auszuführen, müsste ich den Variablennamen der aktuellen Instanz (auf diese in $this referenziert wird) in eine Stringvariable lesen, um $GLOBALS[$Name-der-aktuellen-Instanz]
ausführen zu können.
Doch ich suche mich schon seit 2 Tagen dumm und dämlich und finde genau 0,Josef.
Natürlich wäre mir auch ein anderer Workarround recht, aber ich will den Variablennamen nicht als Parameter übergeben müssen oder gar extra löschen müssen. Ich habe außerdem nicht die Möglichkeit, die Version zu welchseln.
Ich kam auf die Idee, so etwas ähnliches zu schreiben, aber hier werden alle Instanzen zerstört.
foreach($GLOBALS as &$Global)
if(is_object($Global) && (get_class($Global) == get_class($this)))
unset($Global);
Bei einem speziellen Aufruf von $this->__destruct();
wird zwar der Code der Methode ausgeführt, aber die Instanz nicht gelöscht.
Ich bin für jede hilfreiche Antwort dankbar nach meinen 2 Tagen Frustration.
lg munsh
Moin!
Ich will eine Methode schreiben, die die aufrufende Instanz verstört.
"VERstört"? Oder ZERstört?
Egal, was du meinst: Es ist innerhalb einer Klasse nicht möglich oder sinnvoll, sich selbst zu zerstören. Denn die Frage, die sich der Interpreter dann stellt: Welchen Code soll ich ausführen, wenn die Zerstörung abgeschlossen ist?
Dein Lösungsansatz ist also falsch. Weil du offensichtlich ein Problem hast, zu dem du schon lange nach einer Lösung suchst, und bei dem du jetzt auf die Idee gekommen bist, dass unset($this);
es scheinbar lösen würde, wenn es ginge.
Bei diesem Problem kann dir das Forum aber nicht helfen. Deshalb: Beschreibe dein Originalproblem. Deine bisherigen Überlegungen zur Lösung dieses Problems sind fehlerhaft, du bist in einer Sackgasse, du musst sowieso umkehren und einen ganz anderen Weg suchen.
- Sven Rautenberg
hi,
...die die aufrufende Instanz verstört.
"VERstört"? Oder ZERstört?
zerstört ;-D
Bei diesem Problem kann dir das Forum aber nicht helfen. Deshalb: Beschreibe dein Originalproblem. Deine bisherigen Überlegungen zur Lösung dieses Problems sind fehlerhaft, du bist in einer Sackgasse, du musst sowieso umkehren und einen ganz anderen Weg suchen.
Ich verwalte mit meiner Klasse Dateien. Für jede Datei benutze ich eine Instanz.
Ich packe die unlink()-Func mit ein paar anderen dazugehörigen Sachen in eine Methode, um dem Nutzer das Löschen mit sauberer Vorbereitung zu erleichtern, damit die <STRG> und die <C>-Taste keine Schürfwunden bekommen.
Ich will aber auch gleich mit dieser Meth die Variable der Instanz löschen, da diese nun nicht mehr benötigt wird und es bei jedem Aufruf ohne der existierenden Datei Fehlermeldungen geben würde.
Ich denke schon, dass hier meine Idee, auch wenn sie unmöglich ist, in die richtige Richtung ging.
lg munsh
Moin!
Bei diesem Problem kann dir das Forum aber nicht helfen. Deshalb: Beschreibe dein Originalproblem. Deine bisherigen Überlegungen zur Lösung dieses Problems sind fehlerhaft, du bist in einer Sackgasse, du musst sowieso umkehren und einen ganz anderen Weg suchen.
Ich verwalte mit meiner Klasse Dateien. Für jede Datei benutze ich eine Instanz.
Und wo speicherst du diese ganzen Instanzen? Doch vermutlich in etwas, das eine Klasse eines Verzeichnisses ist. Also letztendlich in einem Array von Datei-Instanzen.
Ich packe die unlink()-Func mit ein paar anderen dazugehörigen Sachen in eine Methode, um dem Nutzer das Löschen mit sauberer Vorbereitung zu erleichtern, damit die <STRG> und die <C>-Taste keine Schürfwunden bekommen.
Im realen Leben des Dateisystems ist das Anlegen und Löschen eine Operation des Verzeichnisses, nicht der Datei. Insofern würde das Löschen auch nicht in der Datei-Klasse stattfinden, sondern in der Verzeichnisklasse. Und an DER Stelle gibts dann auch kein Problem mit dem Entfernen des Datei-Objektes, weil es sich eben nicht selbst entfernen muss.
- Sven Rautenberg
hi,
[...] Für jede Datei benutze ich eine Instanz.
Und wo speicherst du diese ganzen Instanzen? Doch vermutlich in etwas, das eine Klasse eines Verzeichnisses ist. Also letztendlich in einem Array von Datei-Instanzen.
Kommt ganz drauf an, in welchem Kontext der Nutzer die Klasse nutzt. Meist, denke ich, jedes Objekt in einer eigene Variablen.
Ich packe die unlink()-Func [...]
Im realen Leben des Dateisystems ist das Anlegen und Löschen eine Operation des Verzeichnisses, nicht der Datei. Insofern würde das Löschen auch nicht in der Datei-Klasse stattfinden, sondern in der Verzeichnisklasse. Und an DER Stelle gibts dann auch kein Problem mit dem Entfernen des Datei-Objektes, weil es sich eben nicht selbst entfernen muss.
Da meist viele Operation mit meist nur einer Datei durchgeführt werden sollen, will ich nicht immer extra den Nutzer die Datei oder bestenfalls die Ressource angeben müssen lassen.
Und weswegen sollte man nur Verzeichnisse löschen; wäre es denn günstiger, jede Datei in ein eigenes Verzeichnis zu packen, gäbe es hier vielleicht einen Ansatz?
Vielen Dank, falls jemandem noch etwas hilfreiches einfällt.
lg m.