kills Geschrieben 27. Februar 2005 Teilen Geschrieben 27. Februar 2005 Hallo zusammen, ich hab mir die letzten Tage ein paar Klassen geschrieben, deren instanzen alle untereinander eine referenz der anderen halten. Nun hab ich ein Problem, dass ich eines der Objekte ändere und aber die anderen die Änderung dieses Objektes nicht mitbekommen. Leider ist das ganze auch 600 Zeilen lang und somit zu lang um es hier zu posten. Wenn jemand eine herrausforderung sucht oder lust hat mir zu helfen kann er sich gerne melden, ich werd den code dann per eMail verschicken. Das ganze soll ein kleines Gerüst für ein openSource CMS werden. Ziel dieser Klassen ist es, eine Tabelle aus einer MySQL Datenbank in HTML darzustellen und dabei noch die nötige flexibilität zu gewährleisen verschiedene "spezial" spalte ein/auszublenden usw. Danke im vorraus und viele Grüße, Markus Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Jaraz Geschrieben 27. Februar 2005 Teilen Geschrieben 27. Februar 2005 Hi, übergibst du das ganze auch als Referenz (&) ? Ob PHP die Übergabe von Objekten als Referenz unterstützt, weiß ich allerdings nicht. Habe das ganze bis jetzt nur bei einfachen Variablen genutzt. Gruß Jaraz Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 27. Februar 2005 Autor Teilen Geschrieben 27. Februar 2005 Hi, übergibst du das ganze auch als Referenz (&) ? Hi, jep ich übergeben die Objekte per Referenz. Bsp: // ausschnitt function appendColumn( &$column) { $column->resultset = & $this->getResultset(); $this->columns[] = & $column; $this->colcount++; } [/PHP] Ob PHP die Übergabe von Objekten als Referenz unterstützt, weiß ich allerdings nicht. Habe das ganze bis jetzt nur bei einfachen Variablen genutzt. Ausserdem hab ich das ganze mit einem einfachen Beispiel versucht und dort gings: [PHP] class a{ var $b; function a(){ } } class b{ var $text; function b(){ } } $a = new a(); $b = new b(); $a->b = & $b; $b->text = "testtex"; var_dump( $a); // ausgabe: object(a)(1) { ["b"]=> &object((1) { ["text"]=> string(7) "testtex" } } Im Prinzip hab ich ja das gleiche gemacht, nur halt mit mehreren Objekten. Gruß, Markus Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Habi Geschrieben 28. Februar 2005 Teilen Geschrieben 28. Februar 2005 ich galub da hast du ein wenig Pech gehabt ;-) Soweit ich weiss sind in PHP4 Objektzuweisungen immer per Kopie und nicht per Referenz. Wo ich das gelesen habe weiss ich jetzt aber auch nicht mehr so genau. Ab PHP 5 ist das Ganze per Referenz. Ich glaub ich hatte das Problem schon mal mit einer foreach Schleife. Wenn ich da über einen Array drüberiteriere und per setXYZ eine Variable des Objektes verändere landet das nicht im Objekt des Arrays (zumindest in PHP4) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 28. Februar 2005 Autor Teilen Geschrieben 28. Februar 2005 ich galub da hast du ein wenig Pech gehabt ;-) Soweit ich weiss sind in PHP4 Objektzuweisungen immer per Kopie und nicht per Referenz. Wo ich das gelesen habe weiss ich jetzt aber auch nicht mehr so genau. Ab PHP 5 ist das Ganze per Referenz. Ich glaub ich hatte das Problem schon mal mit einer foreach Schleife. Wenn ich da über einen Array drüberiteriere und per setXYZ eine Variable des Objektes verändere landet das nicht im Objekt des Arrays (zumindest in PHP4) wie du an meinem oben geposteten Beispiel siehst, sollte es ja funktionieren Ausgabe: // ausgabe: object(a)(1) { ["b"]=> &object((1) { ["text"]=> string(7) "testtex" } } [/code] Da ist ja ein &object drinn... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 28. Februar 2005 Teilen Geschrieben 28. Februar 2005 Hi, jep ich übergeben die Objekte per Referenz. Bsp: // ausschnitt function appendColumn( &$column) { $column->resultset = & $this->getResultset(); $this->columns[] = & $column; $this->colcount++; } [/PHP] Ausserdem hab ich das ganze mit einem einfachen Beispiel versucht und dort gings: [PHP] class a{ var $b; function a(){ } } class b{ var $text; function b(){ } } $a = new a(); $b = new b(); $a->b = & $b; $b->text = "testtex"; var_dump( $a); // ausgabe: object(a)(1) { ["b"]=> &object((1) { ["text"]=> string(7) "testtex" } } Im Prinzip hab ich ja das gleiche gemacht, nur halt mit mehreren Objekten. Gruß, Markus Das Beispiel funktioniert, weil du das Objekt (und damit eine bekannte Speicheradresse) direkt zuweist. Dein Code: Probier doch mal in Methode getResultset() eine Referenz zurückzugeben. Alternativ kannst du ja eine Referenz an deine Methode übergeben. Übrigens: welche Referenz funktioniert und welche nicht (das pushen ins array, oder das lesen des Resultsets)? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 28. Februar 2005 Autor Teilen Geschrieben 28. Februar 2005 Dein Code: Probier doch mal in Methode getResultset() eine Referenz zurückzugeben. In PHP4 kann man keine referenzen zurückgeben. Das müsste ich dann wie du schon sagst so machen: Alternativ kannst du ja eine Referenz an deine Methode übergeben. Übrigens: welche Referenz funktioniert und welche nicht (das pushen ins array, oder das lesen des Resultsets)? das pushen funktioniert, aber das lesen nicht.... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.