EndEffekt: Objekt-Array

Hallo,

ist es irgendwie möglich ein Array bestehend aus Objekten zu erzeugen?

So hab ichs bereits probiert:

bsparray[3] = new bspKlasse;

Doch, falls ich dann versuche auf eine Methode dieser Klasse zuzugreifen, erhalte ich den Fehler:

Call to a member function loadFromDB() on a non-object

Muss ich evtl. das ein Casting oder ähnliches vornehmen, weil nur Variablen gespeichert werden?

  1. echo $begrüßung;

    ist es irgendwie möglich ein Array bestehend aus Objekten zu erzeugen?

    Ein Element eines Arrays ist ganz genau so wie eine normale Variable zu betrachten und zu verwenden. Jede Variable kann alle unter PHP vorhandenen Typen aufnehmen, skalare (einfache) und komplexe.

    bsparray[3] = new bspKlasse;

    Das erste ist keine PHP-Variable, dazu fehlt ihr das $ am Anfang.

    Call to a member function loadFromDB() on a non-object

    Was steht denn da drin, worauf du zugreifen willst? var_dump() und print_r() zeigen dir das an. Vorher ein <pre> erhöht die Übersichtlichkeit der Ausgabe.

    Muss ich evtl. das ein Casting oder ähnliches vornehmen, weil nur Variablen gespeichert werden?

    Sicherlich nicht. Rumraten bringt nichts. Mache Kontrollausgabe! Wenn du etwas probierst, mach vorher und hinterher Kontrollausgaben! error_reporting ist hoffentlich auf E_ALL und display_errors auf on gestellt.

    echo "$verabschiedung $name";

    1. Hallo und Danke schonmal,
      aber weitergebracht hat mich das alles nicht wirklich.

      Dass da ein $ fehlt hab ich jetzt auch bemerkt, aber das ist nicht der Fehler in meinem eigentlichen Programm.

      Testausgabe habe ich vorher natürlich auch gemacht, deswegen hab ich ja auch vermutet, dass ich casten muss, weil eben nur die Variablen und nicht die Methoden aufgelistet wurden.

      Bis vor einigen Minuten habe ich auch noch geklaubt, dass Arrayelemente genau wie Variablen verwaltet werden, deswegen bin ich ja so überrascht.

      Die Ausgabe sieht nebenbei auch ganz gut aus:

      object(TShip)#4 (10) {
        ["id:private"]=>  NULL
        ["offensive:private"]=>  NULL
        ["defensive:private"]=>  NULL
        ["speed:private"]=>  NULL
        ["space:private"]=>  NULL
        ["owner:private"]=>  NULL
        ["count:private"]=>  NULL
        ["attainable:private"]=>  NULL
        ["trading:private"]=>  NULL
        ["acting:private"]=>  NULL
      }

      Nur der Zugriff auf eine Methode bereitet wie gesagt Probleme.

      1. echo $begrüßung;

        Testausgabe habe ich vorher natürlich auch gemacht, deswegen hab ich ja auch vermutet, dass ich casten muss, weil eben nur die Variablen und nicht die Methoden aufgelistet wurden.

        Methoden werden von var_dump() und print_r() nicht aufgelistet. Die gehören zur Klasse, nicht zu den Objekt-Daten.

        Die Ausgabe sieht nebenbei auch ganz gut aus:
        object(TShip)#4 (10) {
          ["id:private"]=>  NULL

        [...]

        }
        Nur der Zugriff auf eine Methode bereitet wie gesagt Probleme.

        Das was du dem var_dump() als Parameter gegeben hast nimmst du nun und hängst ein ->TShip_methoden_name() hintendran. Das muss so funktionieren. Wenn nicht, stelle bitte das Problem mit dem geringstmöglichen Code nach und zeige dann diesen hier.

        echo "$verabschiedung $name";

        1. Hai,

          funktioniert leider immernoch nicht.

          Code:

          $this->Ships[$Info["id"]] = new TShip();
          $this->Ships[$info["id"]]->TShip_loadFromDB($Info["id"]);

          Fehler:

          Fatal error: Call to a member function TShip_loadFromDB() on a non-object in /opt/lampp/htdocs/Mythagon/classes.php on line 187

          1. Hello,

            funktioniert leider immernoch nicht.

            Code:

            $this->Ships[$Info["id"]] = new TShip();
            $this->Ships[$info["id"]]->TShip_loadFromDB($Info["id"]);

            ^
                             |
                             +--- Dir ist schon klar, dass da zwei unterschiedliche Varaiblen stehen?

            Harzliche Grüße vom Berg
            http://bergpost.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
            Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

            1. Hai,

              omg wie lächerlich...

              Tut mir leid euch damit genervt zu haben.

              Vielen Dank nochmal...

              *vor-die-stirn-hau*

              1. echo $begrüßung;

                omg wie lächerlich...

                Diesen "lächerlichen" Tippfehler bekommst du übrigens angezeigt, wenn du das error_reporting auf E_ALL gestellt hast.

                echo "$verabschiedung $name";

          2. echo $begrüßung;

            $this->Ships[$Info["id"]] = new TShip();
            $this->Ships[$info["id"]]->TShip_loadFromDB($Info["id"]);

            Das TShip in meinem TShip_methoden_name sollte nur anzeigen, dass du eine Methode der TShip-Klasse dort anführen sollst. Wenn die Methode "loadFromDB" heißt, darf da auch nur das stehen.

            Du hast also var_dump($this->Ships[$info["id"]]); aufgerufen und eine Ausgabe
              object(TShip)#4 (10) {
            usw. erhalten? Dann muss auch $this->Ships[$info["id"]]->loadFromDB() keinen Fehler bringen.

            Nochmal der Hinweis: Versuche das Problem mit dem geringstmöglichen Code nachzubauen.

              
            class EndEffekt {  
              public $dummy = 42;  
              
              function foo() {  
                echo 'Ich bin EndEffekt::foo().';  
              }  
            }  
              
            $a = array();  
            $a[0] = new EndEffekt;  
            var_dump($a[0]);  
            $a[0]->foo();
            

            Damit lässt sich dein Problem nicht nachvollziehen. Erweitere den Code nun solange, bis es auftritt. Alternativ kannst du auch deinen vorhandenen Code solange kürzen bis es weg ist. Dann hast du auch die Stellen, an der dein Fehler zu finden sein muss.

            echo "$verabschiedung $name";