[php] Klasse new



  • Hi Leute,

    wenn man von einer klasse mit new eine Instanz anlegt

    $gr = new klasse();

    und ich brauche die nicht mehr gibt es sowas wie delete?

    bzw. was passiert wenn ich

    gr=newklasse();gr = new klasse(); gr->irgendwas
    $gr = new klasse();

    mache ?



  • Wenn du Pech hast, dann hast du mit deinem Konstrukt eine Speicherleiche.

    Ich kenne mich mit objektorientierten Sachen in PHP zwar nicht aus, aber von anderen objektorientierten Sprachen her weiß ich, dass es normalerweise immer ein delete zu einem new gibt.


  • Mod

    PHP hat einen Garbage Collector - dh es gibt kein delete - wie in Java

    Wenn du Variablen freigeben willst, dann setze sie auf false oder so. Ist aber relativ unwichtig da PHP scripte ja nur sehr kurz laufen (keine 10 sekunden) - deshalb wird der GC meisstens nur am Ende aktiv - was performance technisch ja auch das klügste ist.



  • Man kann der Garbage Collection aber schon auf die Sprünge helfen:

    void unset ( mixed var);

    gibt jede Variable zum Abschuß frei. Ein direkt anschließendes isset(mixed var), gibt korrekt false. Der Speicher selber wird nat. vom GC freigegeben.

    Gruß Karsten



  • PHP und new ist nicht mit C++ vergleichbar. Es wird in PHP eine Kopie des Objektes zurückgegeben statt Pointer(die gibt es in PHP nicht) evtl Referenz bei PHP5 und wenn du das machst:
    gr=newklasse();gr = new klasse(); gr->irgendwas
    $gr = new klasse();
    ist das bei PHP keine Tragödie (Speicher wird soweit ich weiß nach $gr->irgendwas automatisch freigegeben PHP4). Wenn du PHP5 hast, kannst du es schnell testen, nach $gr->irgendwas wird der Destruktor aufgerufen.



  • man sollte $klasse = &new klasse() benutzen, damit wird nur eine instanz der klasse erzeugt.



  • Sili schrieb:

    man sollte $klasse = &new klasse() benutzen, damit wird nur eine instanz der klasse erzeugt.

    In PHP4 ja, in PHP5 brauchst du den & nicht. Aber unlogischerweise werden Kopien von Objekten in PHP shcneller erzeugt als Referenzen.


  • Mod

    Strogij schrieb:

    In PHP4 ja

    Nein. Denn eine Referenz erstellen ist elendig lahm - sowas macht man nur, wenn das kopieren wirklich länger dauern würde.

    Deshalb schreibt man auch kein
    &new

    das bringt ja nix, ausser dass es mehr zeit kostet



  • Ja, meine ich doch auch. 🙄 Sollte oder nicht ist ja 'ne andere Sache, ich meinte nur, daß PHP4 automatisch eine Kopie und PHP5 eine Referenz erzeugt. 😉


Anmelden zum Antworten