![]() |
![]() |
|
![]() |
![]() |
|
Programmierung Rat & Tat für Programmierer |
![]() |
|
Themen-Optionen | Ansicht |
![]() |
#1 |
Elite
![]() |
![]() Folgendes Problem, das mit grad in den Wahnsinn treibt;
ich hab eine Klasse A, die ein Array aus Objekten der Klasse B besitzt. In den B-Objekten hab ich ebenfalls ein Array, das assoziative Arrays speichern soll. gekürzt: class B { var $values; function setValues ($valArray) { * $this->values[] = $valArray; * echo sizeof($this->values); } } rufe ich jetzt aus der Klasse A die Funktion setValues am jeweiligen Objekt aus, gibt mir, egal wie oft sie aufgerufen wird, sizeof immer 1 zurück. rufe ich sizeof aus einer anderen funktion auf, gibt sie mir überhaupt 0 zurück. was mach ich falsch? ich hoff das versteht man so ungefähr ![]() |
![]() |
![]() |
![]() |
#2 |
Veteran
![]() |
![]() wenn ich das richtig verstanden habe ist $values ein array von arrays. und jedesmal wenn setvalues aufgerufen wird, soll der übergebene array zum array of arrays hinzugefügt werden?
wenn das so ist, würd ichs wie folgt machen: class B { var $values = array(); function setValues ($valArray) { array_push($this->values, $valArray); echo sizeof($this->values); } }
____________________________________
religion is a virus from outer space |
![]() |
![]() |
![]() |
#3 |
Elite
![]() |
![]() naja, das hab ich schon probiert
ich habs jetzt auf jeden fall nochmal probiert, er übernimmt das $this->values nicht in die objektvariablen und ich hab keine ahnung warum. sprich ich kann was in $this->values speichern und es steht mir nach der funktion nicht zur verfügung |
![]() |
![]() |
![]() |
#4 |
Veteran
![]() |
![]() also ich habs kurz probiert, bei mir gehts so.
kannst du das ganze programm posten, damit ich weiss ob wir auch vom selben sprechen.
____________________________________
religion is a virus from outer space |
![]() |
![]() |
![]() |
#5 |
Elite
![]() |
![]() ok, ich hab mich gestern noch gespielt, weiß jetzt ungefähr woran es scheitert:
ich post mal die auszüge, die damit was zu tun haben: class A { var $blocks = array(); //array, in dem die block-objekte gespeichert sind (siehe tblock.inc.php) function defineBlock ($blockname) { $blockcode = ... //blockcode extrahieren aus best. daten $tmpBlock = new B ($blockname); $tmpBlock->setBlockCode ($blockcode); array_push($this->blocks, $tmpBlock); } function setVariables ($blockname, $varArray) { foreach ($this->blocks as $currentBlock) { if ($currentBlock->getBlockName() == $blockname) { $currentBlock->setValues($varArray); break; } } } function output () { for ($i=0; $i<sizeof($this->blocks); $i++) { $currentBlock = $this->blocks[0]; $parsecode = str_replace ($currentBlock->getBlockCode, $currentBlock->parseBlock(), $parsecode); } return $parsecode; } } class B { var $name; var $blockcode; var $values = array(); function TBlock ($blockname) { if (is_string($blockname)) { return $this->name=$blockname; } } function setBlockCode ($code) { //-- setzt den Code --// $this->blockcode = chop($code); } function setValues ($valArray) { array_push($this->values, $valArray); //das ist die problemzeile } function parseBlock () { foreach ($this->values as $valArray) { $currentBlockCode = $this->blockcode; foreach ($valArray as $key => $name) { $currentBlockCode = str_replace ($key, $name, $currentBlockCode); } $returnString .="\n $currentBlockCode"; } return $returnString; } } ok, das müssts jetzt im wesentlichen gewesen sein. der fehler is übrigens folgender: benutzt ich im test-script nur die klasse B, so funktioniert alles ganz normal. will ich B über A benutzen (also ein array aus B-objekten), setzt mir array_push($this->values, $valArray) irgendwas, aber nicht das array. sprich bei einer ausgabe mit sizeof($this->values) in anderen funktionen (wie zB parseBlock) wird mir immer 0 zurückgegeben. sollt das nicht ausreichen, kann ich euch das programm mailen. |
![]() |
![]() |
![]() |
#6 |
Veteran
![]() |
![]() ja stimmt, mit dem array of objects gibts probleme.
Das hängt wahrscheinlich damit zusammen, dass du die objekte aus dem array dauernd in temporären variablen zwischenspeicherst. z.B. in der funktion setvariables: function setVariables ($blockname, $varArray) { foreach ($this->blocks as $currentBlock) { if ($currentBlock->getBlockName() == $blockname) { $currentBlock->setValues($varArray); break; } hier wird das gefundene objekt in der temp. var. $currentBlock zwischengespeichert. dann rufst du die methode setValues auf, diese wird jedoch auf das temp. objekt $currentBlock angewendet, nicht auf das eigentlich objekt im array! sieh dir mal den artikel How does PHP handle arrays of objects? in den php.faqts an, vielleicht findest du dann eine lösung.
____________________________________
religion is a virus from outer space |
![]() |
![]() |
![]() |
#7 |
Elite
![]() |
![]() *riesensteinvomherzenfall*
danke, das wars wirklich! bin vom java scheinbar die pointer schon zu gewöhnt |
![]() |
![]() |
![]() |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | |
|
|