Destruktor aufruf
T-Rex
- php
Moin,
hab eben versucht per Destruktor Aufruf etwas ins HTML zu setzen. Also ein echo im Destruktor. Das Objekt wird aber nicht expliziet zerstört. Der Destruktor wird jedoch trotzdem aufgerufen, aber das echo hat anscheinend keinen Sinn mehr an dieser Stelle. Im HTML sehe ich zumindest nichts mehr.
Wieso bewirkt der Echo Befehl an dieser Stelle nichts?
public function __destruct()
{
echo "Gruß <br /> T-Rex";
}
Hi,
hab eben versucht per Destruktor Aufruf etwas ins HTML zu setzen.
Zu welchem Zweck?
Das Objekt wird aber nicht expliziet zerstört. Der Destruktor wird jedoch trotzdem aufgerufen,
Also erst durch Beendigung des Scriptes?
aber das echo hat anscheinend keinen Sinn mehr an dieser Stelle.
An Ausgaben im Destruktor kann ich generell wenig sinnvolles erkennen.
Im HTML sehe ich zumindest nichts mehr.
In den Quellcode geschaut?
MfG ChrisB
In den Quellcode geschaut?
Joa da steht nix.
Der Zweck dient dem Debuggen. Hab eine Funktion und wenn ich die Aufrufe wird der Übergebene Wert (String, Array, Object) auseinander genommen und lesbar ins HMTL geschrieben. Wenn ich diese Funktion vor dem Doctype ausführe wird der Doctype zerschossen. Cookies können eventuell auch nicht mehr gesetzt werden. Auf der anderen Seite kann es im HTML passieren, dass die Ausgabe an einer unglücklichen stelle passiert z.B. in einer Box die unsichtbar ist.
Die Lösung wäre ja einfach ein unset(Object) am Ende des Scriptes. Damit die Funktion jedoch leicht auf andere Systeme portierbar ist, möchte ich auf eine definierte Ausgabe an einer Stelle des Scriptes verzichten.
Gruß
defenierter
T-Rex
Hi,
Der Zweck dient dem Debuggen.
Wenn du das etwas vernünftiger machen willst, als mit an irgendwelchen Stellen rausgefeuerten Ausgaben, schau dir doch mal FirePHP an.
MfG ChrisB
Hi,
Der Zweck dient dem Debuggen.
Wenn du das etwas vernünftiger machen willst, als mit an irgendwelchen Stellen rausgefeuerten Ausgaben, schau dir doch mal FirePHP an.
MfG ChrisB
Habs mir mal angeguckt. Da man dafür das ZendFramework braucht ist das eine noch schlechtere Idee als die Ausgabe einfach ans Ende zu hängen.
Meine Frage ist jedoch noch unbeantwortet. Wieso wird kein HTML Code mehr an das komplette HTML "Dokument" gehängt wenn man nicht explizite im Code das Object zerstört?
Gruß
fragender
T-Rex
Hi,
Meine Frage ist jedoch noch unbeantwortet. Wieso wird kein HTML Code mehr an das komplette HTML "Dokument" gehängt wenn man nicht explizite im Code das Object zerstört?
K.A., was du falsch machst.
class Foo {
public function __construct() { echo "ich bin da\n"; }
public function __destruct() { echo "ich bin weg\n"; }
}
$bar = new Foo();
unset($bar);
echo "fertig\n";
Ausgabe, wie erwartet:
ich bin da
ich bin weg
fertig
MfG ChrisB
Wie ich bereits geschrieben habe, mache ich eben kein explizites unset. Wie aber schon geantwortet wurde, ist wurde der Header an der Stelle bereits versendet.
Dennoch danke für deine Hilfe!!
Gruß
dankender
T-Rex
Hi!
Wie ich bereits geschrieben habe, mache ich eben kein explizites unset.
Geht bei mir mit ChrisBs Beispiel auch ohne unset(), dann allerdings mit dem "fertig" vor dem "ich bin weg".
Wie aber schon geantwortet wurde, ist wurde der Header an der Stelle bereits versendet.
Das ist zwar richtig, hat aber mit deinem Problem überhaupt nichts zu tun. Für eine normale Ausgabe ist es egal, ob Header schon weg sind oder nicht. In deinem Fall wäre es höchstens möglich, dass der Ausgabekanal bereits geschlossen wurde, was aber bei meinem Test offensichtlich nicht so war.
Lo!
Moin!
Der Zweck dient dem Debuggen.
Wenn du das etwas vernünftiger machen willst, als mit an irgendwelchen Stellen rausgefeuerten Ausgaben, schau dir doch mal FirePHP an.
MfG ChrisB
Habs mir mal angeguckt. Da man dafür das ZendFramework braucht ist das eine noch schlechtere Idee als die Ausgabe einfach ans Ende zu hängen.
Du hast falsch geschaut. Das _kann_ man natürlich auch mit dem ZF benutzen, aber das allererste, was einem dazu in die Suchausgabe fällt, ist doch die PHP-Standalone-Library, oder?
- Sven Rautenberg
Du hast falsch geschaut. Das _kann_ man natürlich auch mit dem ZF benutzen, aber das allererste, was einem dazu in die Suchausgabe fällt, ist doch die PHP-Standalone-Library, oder?
- Sven Rautenberg
Du hast recht :(. In solchen Sachen bin ich so verdammt ungeschickt *heul*. Hab jetzt die Richtige Bibliothek und es funktioniert sogar. Echt klasse das ding :).
Einziger Wermutstropfen, mir werden keine Methoden bei Objekten angezeigt - schade.
Gruß
staunender
T-Rex
Meine Frage ist jedoch noch unbeantwortet. Wieso wird kein HTML Code mehr an das komplette HTML "Dokument" gehängt wenn man nicht explizite im Code das Object zerstört?
Hinweis aus dem Handbuch:
"Der Destruktor wird während der Skript Abschaltung aufgerufen, weshalb die Header immer bereits gesendet sind"