Zum Inhalt springen

PHP4 Referenzierte Objekte


Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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(B)(1) { ["text"]=> string(7) "testtex" } }

Im Prinzip hab ich ja das gleiche gemacht, nur halt mit mehreren Objekten.

Gruß,

Markus

Link zu diesem Kommentar
Auf anderen Seiten teilen

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)

Link zu diesem Kommentar
Auf anderen Seiten teilen

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...

Link zu diesem Kommentar
Auf anderen Seiten teilen

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(B)(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)?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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....

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...