Objekte in Arrays ablegen und darauf zugreifen?

quezo

Mitglied
Hallo,

mein Problem ist, wie kann ich auf die Methoden eines Objekts zugreifen, welches in einem Array liegt, der von einem anderen Objekt zurückgegeben wird.

Z. B. :
PHP:
class Foo {
 function Foo() {}

 function getBars() {
   $bars = array();
   $i = 0;
   while(...) {
   $bars[$i] = new Bar("1", "bla blubber");
   ...
   $i++;
   }
   return $bars;
 }
}

class Bar {
 var $id;
 var $name;

 function Bar($id, $name) {
  $this->id = $id;
  $this->name = $name;
 }
 // Getters and Setters
 function getID() {
  return this->name;
 }
}

Um dann auf die Daten des Bar-Objekts zugreifen zu können, habe ich es mit diesem Code versucht, der allerdings immer den Fehler
Notice: Undefined property: getID in scriptname.php on line xy

PHP:
$foo = new Foo();
$bars = $foo->getBars();

for($i=0; $i<sizeof($bars); $i++) {
 echo $bars[$i]->getID();
}

Wie kann man sonst auf die Daten des Objekts zugreifen?

Danke für Euere Posts
 
Der Ansatz war schon richtig, nur hast du bei der Schleife nicht auf die richtigen Elemente referenziert:

PHP:
<?php
class Foo {

    var $_i     = 0;
    var $bars   = array();

    function Foo() {
    }

    function getBars() {
        for($this->i = 0; $this->i < 10; $this->i++) {
            $this->bars[$this->i] = new Bar($this->i, "bla blubber");
        }
        return $this->bars;
    } 
} 

class Bar {

    var $id;
    var $name;

    function Bar($id, $name) {
        $this->id   = $id;
        $this->name = $name;
    }

    function getID() {
        return $this->id;
    }

    function getName() {
        return $this->name;
    }
}

$foo    = new Foo();
$bars   = $foo->getBars();

for($i = 0; $i < sizeof($bars); $i++) {
    echo "id: ".$bars[$i]->getID()." ";
    echo "value: ".$bars[$i]->getName()." <br>";
}
?>
 
Hi, danke für Deine Antwort.

Welche Schleife meinst Du? Die in der Klasse Foo, um den Array zu befüllen oder die zum Ausgeben?

Ich habe zudem das so gelöst, dass die Klasse Foo in einem eigenen php-File liegt, genauso wie die Klasse Bar. Diese beiden werden dann in einem dritten Skript über include() importiert. Instanziert wird dort aber nur die Klasse Foo, wie im Beispiel skizziert. Aber leider funktioniert es noch nicht.
 
Original geschrieben von quezo
Welche Schleife meinst Du? Die in der Klasse Foo, um den Array zu befüllen oder die zum Ausgeben?
Ich mein die Schleife innerhalb der Klasse Foo.

Original geschrieben von quezo
Ich habe zudem das so gelöst, dass die Klasse Foo in einem eigenen php-File liegt, genauso wie die Klasse Bar. Diese beiden werden dann in einem dritten Skript über include() importiert. Instanziert wird dort aber nur die Klasse Foo, wie im Beispiel skizziert. Aber leider funktioniert es noch nicht.
Auch hierzu gibts eine Lösung:

PHP:
<?php
error_reporting(E_ALL);

require_once './foo.class.php';
require_once './bar.class.php';

$foo    = new Foo();
$bars   = $foo->getBars();

for($i = 0; $i < sizeof($bars); $i++) {
    echo "id: ".$bars[$i]->getID()." ";
    echo "value: ".$bars[$i]->getName()." <br>";
}

?>

So klappts ohne Probleme. :)
 
Vielen Dank.

Nun klappt es. Es lag tatsächlich an der Schleife in der Foo-Klasse. Danke auch für das Listing mit dem include()
 

Neue Beiträge

Zurück