Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

PHP4 Referenzierte Objekte

Empfohlene Antworten

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

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

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

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)

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

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

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.