PHP Klasseninstanz zwischenspeichern

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • PHP Klasseninstanz zwischenspeichern

    Mahlzeit @ all!

    sowas bräuchte ich^^

    Problem: Ich hab eine php datei in der mehrere funktionen stehen. In fast jeder funktion greif ich atm per

    Quellcode

    1. $var = new klasse;
    2. $var->methode();


    auf die klasse und deren methoden zu.

    da ich das allerdings in jeder funktion machen muß, und demnach in jeder funktion eine neue instanz der klasse anlege(oder täusch ich mich da???) funktioniert mein projekt zwar, ist aber, wie ich finde, eher suboptimal.

    ich habe schon versucht zu begin der datei die instanz zu erzeugen und dann per global auf die klasse zuzugreifen, allerdings funzt das nicht wie erwartet.

    gibt es eine möglichkeit eine instanz der klasse am anfang zu erzeugen und dann in jeder funktion der datei darauf zuzugreifen?

    beesten dank schon mal

    mfg da BendIt
    .:Reden Ist Schweigen und Silber Ist Gold:.

    real programmers don't comment their code: if it was hard to write, it should be hard to read!
  • Klingt so als solle die Methode statisch sein, oder?
    Einfach das Schlüsselwort static benutzen

    Quellcode

    1. class klasse {
    2. public static function methode() {
    3. //do something
    4. }
    5. }
    6. echo klasse::methode();


    Vefrügbar ab PHP 5.

    Falls du kein PHP 5 haben solltest, sehe ich aber auch kein Problem mit der Einbindung als Globale, oder mit dem Übergeben als Funktionsparameter.
  • hm,

    komischer weise gibt var_dump() genauso wie print_r() immer nur NULL zurück was ja bedeudet das die variable leer ist.

    mir ist gerade aufgefallen das ich die php datei in der ich auf die klasse->methoden zugreife für ajax requests benutze. also würde ja bei jedem ajax request eine neue instanz angelegt. wäre wohl auch kontraproduktiv :-/

    aber vom aufbau her müsste es ja so:

    Quellcode

    1. <?PHP
    2. include 'klasse1.class.php';
    3. $klasse = new klasse;
    4. function eins()
    5. {
    6. global $klasse;
    7. $klasse->methode1();
    8. }
    9. function zwei()
    10. {
    11. global $klasse;
    12. $klasse->methode2();
    13. }
    14. etc...
    15. ?>
    Alles anzeigen


    funktionieren oder?

    thx schonma^^

    mfg da BendIt
    .:Reden Ist Schweigen und Silber Ist Gold:.

    real programmers don't comment their code: if it was hard to write, it should be hard to read!
  • Ja, dein Code sollte so funktionieren.

    Aber was genau funktioniert denn bei static nicht? Die Methoden scheinen ja immer das selbe zu machen. Egal wie sie instantiiert oder manipuliert wurden. Für den Fall sind die statischen Methoden wirklich am besten.

    mit print_r oder var_dump kannst du auf die Klasse nicht zugreifen, da ja nur die Methoden statisch sind.
  • ja was heist jetzt statisch? ;)

    die methoden an sich ändern sich glaube nicht.

    kennt php4 denn static? hab das bis jetzt noch ni weiter gebraucht o,O

    hm, das erklärt die "NULL" bei var_dump / print_r aber das ändert nichts am problem, leider. denn ein zugriff ist so nicht möglich... fehler lautet ungefähr "...object on a non-object..." usw. also kein zugriff auf die klasse wies aussieht :(

    hab das mal nach dem schema getestet und funzt so wie gesagt nicht...

    deshalb auch meine fraage^^

    thx & mfg da BendIt
    .:Reden Ist Schweigen und Silber Ist Gold:.

    real programmers don't comment their code: if it was hard to write, it should be hard to read!
  • sicher, dass es nicht an der Klasse liegt?
    Dein Beispiel von oben funktioniert mit meiner dummy Klasse einwandfrei:

    Quellcode

    1. <?php
    2. class klasse {
    3. function methode1() {
    4. echo 'a<br />';
    5. }
    6. function methode2() {
    7. echo 'b<br />';
    8. }
    9. }
    10. $klasse = new klasse;
    11. function eins()
    12. {
    13. global $klasse;
    14. $klasse->methode1();
    15. }
    16. function zwei()
    17. {
    18. global $klasse;
    19. $klasse->methode2();
    20. }
    21. eins();
    22. zwei();
    23. ?>
    Alles anzeigen
  • kann es sein das es nur funktioniert wenn die klasse direkt in der datei drin steht? ich includiere die klasse in meinem projekt.

    werd das mit static mal probieren. da muß die klasse als static deklariert werden und die funktionen auch oder?

    danke euch erstmal ;)


    mfg da BendIt
    .:Reden Ist Schweigen und Silber Ist Gold:.

    real programmers don't comment their code: if it was hard to write, it should be hard to read!
  • "BendIt" schrieb:

    kann es sein das es nur funktioniert wenn die klasse direkt in der datei drin steht? ich includiere die klasse in meinem projekt.

    werd das mit static mal probieren. da muß die klasse als static deklariert werden und die funktionen auch oder?

    danke euch erstmal ;)


    mfg da BendIt


    Nein, eine Klase, die statische Methoden hat, muss nicht unbedingt auch static sein!
  • Mahlzeit

    nur mal zur info: hab den "fehler" gefunden

    problem war ganz einfach das ich die instanz erst NACH ca 10 if anweisungen erzeugt hatte. (welche wie schon gesagt den ajax response steuern)
    also hab ichs direkt nach der include anweisung welche die klasse einbindet gemacht und schon funzt die sache.

    allerdings noch etwas anderes:

    gibt es in php4 die möglichkeit zu prüfen ob und wann ein instanziiertes objekt "zerstört" wird/wurde? gibt ja leider kein destruktor in php4...

    denn jetzt wird eigentlich immernoch bei jedem ajax request, welcher auf die datei zeigt, eine instanz erzeugt (da es ja direkt in der 3 zeile der datei steht) oder gibt es die möglichkeit die instanz nur EINMAL anzulegen und dann immer wieder zu benutzen?

    und wie sieht es bei einem mehrbenutzer system aus? dürfte eigentlich kein problem sein oder? da ja trotzdem für jeden der die anwendung nutzt eine instanz angelegt wird...

    is mir noch ein ganz klein wenig unklar obwohl auch nicht ganz unlogisch die sache

    danke nochma & mfg da BendIt
    .:Reden Ist Schweigen und Silber Ist Gold:.

    real programmers don't comment their code: if it was hard to write, it should be hard to read!
  • Destruktor? Im Normalfall brauchst du die nicht. Die Lebenszeit einer Instanz ist die Zeit die, die der PHP Parser zum kompilieren braucht. Also im Normalfall ein paar Millisekunden. Einen Garbage Collector wie in Java gibts ja auch nicht.

    Die einzige Möglichkeit den Klassenzustand zu sichern geht über Sessions.

    Mehrbenutzerbetrieb ist auch kein Problem, da es schlichtweg keinen Container wie in JavaEE gibt. Die Instanz lebt nur die Scriptausführzeit.