Jasmin: *RECURSION* bei Referenzen/Objekten

Hallo liebe Forumsgemeinde,

Ich habe ein Objekt a, mit einer Eigenschaft aa. Diese Eigenschaft belege ich mit &$b, dadurch ist die Eigenschaft eine Referenz auf das Obejekt b. Im Objekt b wiederrum gibt es eine Referenz auf das Objekt a.
Gebe ich ein var_dump von a aus kommt irgendwann *RECURSION* in der Eigenschaft aa.

Gibt es dadurch irgenwelche Probleme (speichertechnisch, Leistung)?

Grüße
Jasmin

  1. hi,

    Ich habe ein Objekt a, mit einer Eigenschaft aa. Diese Eigenschaft belege ich mit &$b, dadurch ist die Eigenschaft eine Referenz auf das Obejekt b. Im Objekt b wiederrum gibt es eine Referenz auf das Objekt a.
    Gebe ich ein var_dump von a aus kommt irgendwann *RECURSION* in der Eigenschaft aa.

    Gibt es dadurch irgenwelche Probleme (speichertechnisch, Leistung)?

    Ja - das hast du doch mit dem var_dump bereits festgestellt.
    Um dir anzeigen zu können, was wirklich hinter der Eigenschaft steht, versucht var_dump die Referenz aufzulösen, um den Wert zu ermitteln. Dahinter steckt aber wieder eine Referenz, also auch die wieder auflösen.

    Und da du eine Ringreferenz konstruiert hast, ginge das jetzt ewig so hin und her - wenn var_dump nicht intelligent genug wäre, dieses (voraussichtlich) sinnlose Spiel nach x Versuchen abzubrechen.

    So, jetzt kommt der Fall, wo du selber mal so eine Auflösung von Referenzen programmierst, weil du sie irgendwofür brauchst.
    Bist du dann auch "intelligent" genug, das irgendwann abzubrechen - oder läuft dein Script gnadenlos in eine Endlosschleife ...?

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. du hast rekursion falsch verstanden oder zumindest falsch umgesetzt.

    was du da machst ist ping-pong. das führt zu einer endlosschleife, wie wahsaga schon erklärt hat.

    die rekursion soll ein programm fortlaufend ausführen, aber immer mit anderen daten. hierbei muß ein endekriterium eintreten, wie es zum beispiel beim abarbeiten von listen oder datenbäumen der fall ist.

    am einfachsten kannst du das mal mit einer liste (array oder collection) ausprobieren. hierbei mußt du im programm den zähler inkrementieren. am besten durch aufruf des selben programmes, wobei du die liste mit dem um 1 erhöhten index übergibst.