PHP Klassen casten

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • PHP Klassen casten

    allo,

    ich habe in einem Array Instanzen von selbst definierten Klassen gespeichert, z.B.:

    $items = array();
    $items[] = new MeineKlasse();

    Nun hat die Klasse MeineKlasse z.B. eine Funktion meineFunktion(). Wenn ich diese Funktion folgendermaßen aufrufe:

    $items[0]->meineFunktion();

    bekomme ich folgende Fehlermeldung:

    Call to a member function on a non-object

    Liegt wahrscheinlich daran, dass PHP4 nicht weiß, dass es eben ein instanziertes Objekt von MeineKlasse ist. In Java würde ich jetzt einen Cast machen, etwa so:

    $aitem = (MeineKlasse)$items[0];
    $aitem->meineFunktion();

    Das geht aber offenbar in PHP4 nicht. Ich habe zwar einen object-Cast gefunden:

    $aitem = (object)$items[0];
    $aitem->meineFunktion();

    aber der liefert:

    Call to undefined function: meineFunktion()

    Wie gehe ich da richtig ran?

    Danke und Gruß
    Ulrich

  • #2
    kanns noch nicht ganz nachvollziehen.

    im zweifel aber

    $aitem = $items[0];
    $aitem->MeineFunktion();

    Kommentar


    • #3
      Das liefert eben leider das Resultat "Call to undefined function: meineFunktion()"...

      Ich paste mal die gesamte Klasse. Es passiert in Zeile 28 (siehe Kommentar), in Zeile 27 caste ich die Funktion. Ohne das (object) cast in Zeile 27 käme die Meldung "Call to a member function on a non-object".

      <code>
      class DirItem {
      var $name;
      var $items;

      function DirItem($name) {
      $this->name = $name;
      $this->items = array();
      }

      function addItem($path, $item) {
      $level = count($path);
      $name = $path[0];
      if (($level == 1) || ($level == 2 && empty($path[1]))) {
      // Add this item to myself
      echo " - adding to myself: ".$name;
      $this->items[$name] = $item;
      } else {
      // Add this item to a subdirectory
      $newpath = array();
      for ($i=1; $i<$level; $i++) {
      $newpath[] = $path[$i];
      }
      echo " - new path: ";
      print_r($newpath);

      // Get existing subdir or create new one
      $subdir = (object)$this->getItem($name); // Hier mache ich den cast
      $subdir->addItem($newpath, $item); // Hier knallt es
      }
      }

      function getItem($name) {
      if (array_key_exists($name, $this->items)) {
      return $this->items[$name];
      } else {
      return null;
      }
      }

      function getItems() {
      return $this->items;
      }
      }
      </code>

      Kommentar


      • #4
        Habs gerade getestet. dein code funzt wunderbar. (übrigens auch ohne "(object)".)

        Ausgabe: - adding to myself: t

        Wie Initialisierst du die Klasse? Wir rufst du die Methode auf?

        Übrigens: http://www.php-resource.de/forum/sho...threadid=50454
        Zuletzt geändert von TobiaZ; 01.01.2006, 18:46.

        Kommentar


        • #5
          Habs gefunden. In Zeile 17 muss heißen

          $this->items[$name] = new DirItem($name);

          sonst sind ja keine Objekte, sondern ein Array im Array gespeichert. Danke trotzdem für die Hilfe!!!

          Gruß
          Ulrich

          Kommentar


          • #6
            Nkay!

            Nach deiner Aussage
            ich habe in einem Array Instanzen von selbst definierten Klassen gespeichert
            war ich eigentlich davon ausgegangen, dass du das korrekt gemacht hättest

            Kommentar

            Lädt...
            X