Objekt „verliert“ Eigenschaft
Robert Bienert
- php
0 dedlfix
Hallo Forum und einen herzlichen Glückwunsch!
Ich habe momentan ein kleines Problem mit Objekten in PHP, und zwar scheint mein Objekt Daten, die ich in einer Eigenschaft speichere, wieder „zu vergessen“. Ich habe also folgenden Code:
class CommentModeration {
var $f;
var $commSid;
function hook_newComment($form) {
$this->commSid = $form['sid'];
fwrite($this->f, 'newComment: '.serialize($this)."\n");
return $form;
}
function hook_adminMail($mail, $blogentry) {
fwrite($this->f, 'adminMail: '.serialize($this)."\n");
$this->commSid = NULL;
return $mail;
}
}
Die beiden Methoden werden in der folgenden Reihenfolge aufgerufen, wie das Logging zeigt:
newComment: O:17:"commentmoderation":2:{s:1:"f";i:0;s:7:"commSid";s:20:"127.0.0.1-1217160603";}
adminMail: O:17:"commentmoderation":2:{s:1:"f";i:0;s:7:"commSid";N;}
Wo ist bei der zweiten Methode nur der Wert der Eigenschaft commSid hin?
Schönen Sonntag,
Robert
echo $begrüßung;
Ich habe momentan ein kleines Problem mit Objekten in PHP, und zwar scheint mein Objekt Daten, die ich in einer Eigenschaft speichere, wieder „zu vergessen“. Ich habe also folgenden Code:
Wenn man selbst noch Code hinzufügen muss, um das Problem nachstellbar zu bekommen, dann kann es passieren, dass man nicht den selben Code hat wie das Problem. So vermutlich auch bei mir, denn ich kann den Fehler nicht nachvollziehen. Interessant ist bei OOP-Problemen auch die PHP-Version.
Wo ist bei der zweiten Methode nur der Wert der Eigenschaft commSid hin?
Schau in den Code dazwischen, oder die Aufrufe der beiden Methoden an, oder die Art, wie das Objekt weitergereicht wird.
echo "$verabschiedung $name";
Moin!
Ich habe momentan ein kleines Problem mit Objekten in PHP, und zwar scheint mein Objekt Daten, die ich in einer Eigenschaft speichere, wieder „zu vergessen“. Ich habe also folgenden Code:
Wenn man selbst noch Code hinzufügen muss, um das Problem nachstellbar zu bekommen, dann kann es passieren, dass man nicht den selben Code hat wie das Problem. So vermutlich auch bei mir, denn ich kann den Fehler nicht nachvollziehen.
Hast du zufällig Jlog bei dir am Laufen? Das ganze soll Teil eines Plugins werden.
Interessant ist bei OOP-Problemen auch die PHP-Version.
Lokal läuft PHP 4.4.8, so, wie es von Apple ausgeliefert wurde. Aber das hat mich auf die Idee gebracht, den Code mal auf dem Server mit PHP 5.2.0 zu testen und siehe da, jetzt funktioniert es. Guter Tipp!
Wo ist bei der zweiten Methode nur der Wert der Eigenschaft commSid hin?
Schau in den Code dazwischen, oder die Aufrufe der beiden Methoden an, oder die Art, wie das Objekt weitergereicht wird.
Zwischen den beiden Methodenaufrufen passiert nichts mit dem Objekt, d.h. es werden keine anderen Methoden aufgerufen. Und Jlog ändert auch nicht eigenmächtig irgendwelche Eigenschaften/Attribute. Es scheint also wirklich an PHP zu liegen.
Viele Grüße,
Robert
echo $begrüßung;
Interessant ist bei OOP-Problemen auch die PHP-Version.
Lokal läuft PHP 4.4.8, so, wie es von Apple ausgeliefert wurde. Aber das hat mich auf die Idee gebracht, den Code mal auf dem Server mit PHP 5.2.0 zu testen und siehe da, jetzt funktioniert es. Guter Tipp!
Der wesentliche Unterschied zwischen PHP4 und PHP5 ist, dass bei PHP4 Objekte als Kopie übergeben werden, wie jeder andere Variablentyp auch, in PHP5 aber als Referenz. Wenn du einer Funktion als Parameter ein Objekt mitgibst, dann änderst du unter PHP4 eine Kopie. Das Original-Objekt bleibt erhalten. Will man dieses ändern, muss man es als Referenzen entgegennehmen. PHP5 verwendet bei der Übergabe von Objekten als Funktionsparameter generell Referenzen. Andere Variablentypen werden weiterhin als Kopie übergeben. Vielleicht ist in diesem Verhalten der Fehler zu suchen. Ansonsten ist mir nicht bekannt, dass PHP4 Alzheimer hätte (wohl aber pensioniert ist).
echo "$verabschiedung $name";