# Objekt einer Klasse in Array Speichern, später wieder laden



## dzab (30. Juli 2004)

Halli Hallo, 
ich arbeite mich gerade in PHP ein und habe eine Frage zur Verwendung von Klassen, bzw. deren Objekte. 
Meine Testklasse sieht wie folgt aus:

```
class Produktkat {
	var $kat = "";
	var $bez = "";
	function Produktkat($a,$b)
	{
		$this->kat = $a;
		$this->bez = $b;
	}
	
	function getKat()
	{
		return $this->kat;
	}
	function getBez()
	{
		return $this->bez;
	}	
}
```

in einer Schleife, lege ich mehrere Objekte an und speichere Sie in einem Array.
So weit so gut, die Objekte werden im Array gespeichert (zumindestens ergibt die Funktion count() die erwartete Anzahl an Elementen.

An einer späteren Stelle will ich das Array auslesen und die Werte aus dem Objekt ausgeben:

```
echo("Elemente in Kategorien: ".count($GLOBALS["kategorien"]) );
for($i=0; $i<count($kategorien); ++$i)
{
	
	$eineKat = settype($GLOBALS["kategorien"][$i],"Produktkat");
	
	echo($eineKat->getKat());
	echo(" : ");
	echo($eineKat->getBez());
	echo("<br>");
}
```

Dann bekomme ich die Fehlermeldung:
Call to a member function on a non-object 

Muss ich die einzelnen Elemente beim auslesen casten?
Wenn ja, wie geht das?

Wenn ich aus Spass per echo($eineKat) ausgebe, bekomme ich 
Object angezeigt....

viele Grüsse
Dirk


----------



## saila (30. Juli 2004)

dein konstrukt ist im zweiten teil falsch. du verweist auf eine klasse über eine klasse die es nicht gibt.

Beispiel:
echo($eineKat->getKat());

hier noch einige Infos zu Klassen und Objekten.

http://www.dclp-faq.de/q/q-klassen-wie.html


----------



## dzab (30. Juli 2004)

Hallo,
meinst Du mit Konstrukt das hier:
settype($GLOBALS["kategorien"][$i],"Produktkat");
?

Das habe ich nur in meiner Verzweiflung mal ausprobiert.
Ich hab das mit den Klassen zuhause noch mal ausprobiert, und da hat es funktioniert....
Das andere Skript war aber auch einiges umfangreicher, mehrere geschachtelte Abfragen. Hab bestimmt an irgendeiner anderen Stelle im Code einen Fehler.....Block schon geschlossen, oder so was....
Trotzdem dankefür die Antwort.

Hier mal der Funktionierende Code (für die, die es interessiert).


```
<?php
class test
{
	var $test;
	var $test2;
	
	function test($a, $b)
	{
		$this->test 	= $a;
		$this->test2 	= $b;
	}
	
	function getTest()
	{
		return $this->test;
	}
	function getTest2()
	{
		return $this->test2;
	}
}
?>

<html>
<head><title></title></head>
<body>
<?php
	$testklasse	= new test("hallo","dirk");
	$testklasse2 	= new test("hallo","andy"); 
	
	$array 		= array();
	$array[0] 	= $testklasse;
	$array[1] 	= $testklasse2;
	
	for($i=0;$i<count($array);++$i)
	{
		$tempklasse = $array[$i];
		echo($tempklasse->getTest() );
		echo(" ".$tempklasse->getTest2() );
		echo("<br>");
	}
?>
</body>
</html>
```


----------



## saila (30. Juli 2004)

ja siehste. das meinte ich. in deinem funzenden code nimmst du ja auch nun bezug auf ein vorhandenes array!


----------



## dzab (30. Juli 2004)

$GLOBALS["kategorien"]

gab es auch, ist halt ein global definiertes array,  der zugriff darauf ging ja auch.
(z. B. Die Anweisung: 
echo("Elemente in Kategorien: ".count($GLOBALS["kategorien"]) );

lieferte die korrekte Anzahl.

Nur die Zuordnung der enthaltenen Elemente und der Klasse ging nicht.

Aber jetzt gehts ja


----------

