Zum Inhalt springen

Array of Object


Empfohlene Beiträge

Hallo,

ich habe ein PHP Problem.

Ich habe in einer Klasse ein Array ($arr = array();)

Mit meiner Methode Add($obj) möchte ich an das Array $arr ein Objekt einer Klasse hinzufügen.

Frage: Ist das möglich?

Wenn: JA, bitte wie?

Vielen Dank für die Antwort!

Gruß Walter

Link zu diesem Kommentar
Auf anderen Seiten teilen

die schlauen köpfe, vor allem die objektorientierten sind glaube ich heute schon alle zu hause.

deshalb versuch ichs mal, aber bidde schlag mich nicht;9

meinst du in etwa so?


<?

	class testClass{

		function test1(){

			return "Ausgabe test1";

		}

	}


	$arTest = Array();

	$test = new testClass;

	array_push($arTest,$test);

	echo($arTest[0]->test1());

?>

also

es gibt ne klasse testClass

es wird eine Instanz $test (= new testClass) erstellt

in ein array ($arTest) wir die instanz $test gepusht

es erfolgt eine ausgabe, nämlich die methose test1 der in $arTest[0] gelagerten instanz $test

oder lieg ich voll falsch...(die sache mit der Add methode hab ich nich so gecheckt)

nur ein versuch ;)

EDIT: achso!!! das array befindet sich auch in einer klasse in der es die methode Add gibt. alles klar. müsste aber genau so gehen oder??

Link zu diesem Kommentar
Auf anderen Seiten teilen

Viel Code,

mein Problen ist am Ende in dem Kommentar.


class Field{


  var $datatype;

  var $fieldname;

  var $fieldlength;


  function SetDataType($datatype, $is_th = true){

    $this->datatype = $datatype;

  }

  function GetDataType($is_th = true){ 	

    return $this->datatype;

  }

}




class FieldList{


  var $array_of_field;


  function FieldList(){

    $this->array_of_field = array();

  }


  function AddField(&$field){

    array_push($this->array_of_field, $field);

  }


  function GetField($index){

    return $this->array_of_field[$index];

  }


  function FieldListCount(){

    return count($this->array_of_field);

  }  


}



$list = new FieldList();


$field1 = new Field();

$field2 = new Field();

$field3 = new Field();

$field4 = new Field();


$field1->SetDataType('Feld1');

$field2->SetDataType('Feld2');

$field3->SetDataType('Feld3');

$field4->SetDataType('Feld4');


$list->AddField($field1);

$list->AddField($field2);

$list->AddField($field3);

$list->AddField($field4);


echo $list->FieldListCount() . ' <br>';


$test =& $list->GetField(0);

echo $test->GetDataType() . '<br>';

$test =& $list->GetField(1);

echo $test->GetDataType() . '<br>';

$test =& $list->GetField(2);

echo $test->GetDataType() . '<br>';

$test =& $list->GetField(3);

echo $test->GetDataType() . '<br>';


/*  und so würde ich das gerne ansprechen, ohne zuerst die Zwischenvariable $test zu verwenden :-)


Auch eine andere objektorientierte Methode ist mir gerne recht :-)


for ($i=0;$i<$list->FieldListCount();$i++)

  echo ($list->GetField(0)->GetDataType());


for ($i=0;$i<$list->FieldListCount();$i++)

  echo Field($list->GetField(0))->GetDataType();


Jedenfalls funktionieren die beiden nicht bei mir.


*/

Vielen Dank für die Hilfe!

Gruß Walter

Link zu diesem Kommentar
Auf anderen Seiten teilen

puhhh, das strengt mich echt an...ich hab versucht das ganze zu checken und mal selbst probiert.

herausgekommen ist folgendes (ich hoffe es hilft weiter):


<?

	class testClass{

		function test1(){

			return "Ausgabe test1";

		}

	}



	class arrayClass{

		var $arTest;

		function arrayClass(){

			$this->arTest = Array();		

		}

		function Add($obj){

			array_push($this->arTest,$obj);	

		}

	}


	$test = new testClass;

	$arrayClassTest = new arrayClass;

	$arrayClassTest->Add($test);


	echo($arrayClassTest->arTest[0]->test1());

?>

es gibt also die testClass

$test = new testClass; neue instanz von testClass

$arrayClassTest = new arrayClass; neue instanz von arrayClass

$arrayClassTest->Add($test); das objekt $test wird in der Add methode dem Array $arTest hinzugefügt (push)

echo($arrayClassTest->arTest[0]->test1()); Ausgabe der methode test1() der sich in arTest befindlichen instanz von testClass

oh gott, ich glaub das mach ich nicht oft mit ;)

hat das geholfen??

Link zu diesem Kommentar
Auf anderen Seiten teilen

Sorry, da must du auf PHP5 warten.

Es ist nicht möglich ein Objekt, das du als Rückgabe einer Funktion erhälst weiter zu dereferenzieren, denn ist ja keine Referenz (siehe Info 1).

ausser du gibts anstatt des Objectes eine Referenz auf das Object zurück.

z.b.


function getObj() {
return &new meinObject();
}
[/PHP]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Die Methode

echo($arrayClassTest->arTest[0]->test1());

ist vermutlich die einfachste, auch wenn sie mir nicht gefällt, da ich direkt die Variable anspreche.

Ich werde dann die Methode mit PHP5 versuchen, die ist mir lieber.

Danke noch einmal.

Gruß Walter

Link zu diesem Kommentar
Auf anderen Seiten teilen

versuch das ma:


class Field{

var $datatype;
var $fieldname;
var $fieldlength;

function SetDataType($datatype, $is_th = true){
$this->datatype = $datatype;
}
function GetDataType($is_th = true){
return $this->datatype;
}
}



class FieldList{

var $array_of_field;

function FieldList(){
$this->array_of_field = array();
}

function AddField(&$field){
array_push($this->array_of_field, $field);
}

function GetField($index){
return &$this->array_of_field[$index]; // hier die Referenz zurückgeben
}

function FieldListCount(){
return count($this->array_of_field);
}

}
[/PHP]

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...