wathlon Geschrieben 7. Juli 2004 Teilen Geschrieben 7. Juli 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 7. Juli 2004 Teilen Geschrieben 7. Juli 2004 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?? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wathlon Geschrieben 7. Juli 2004 Autor Teilen Geschrieben 7. Juli 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
forTeesSake Geschrieben 7. Juli 2004 Teilen Geschrieben 7. Juli 2004 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?? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
etreu Geschrieben 7. Juli 2004 Teilen Geschrieben 7. Juli 2004 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). Infos: http://de2.php.net/manual/de/language.references.arent.php und http://de2.php.net/manual/de/migration5.oop.php Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 8. Juli 2004 Teilen Geschrieben 8. Juli 2004 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] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
wathlon Geschrieben 8. Juli 2004 Autor Teilen Geschrieben 8. Juli 2004 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kills Geschrieben 8. Juli 2004 Teilen Geschrieben 8. Juli 2004 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] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.