WCM - Das österreichische Computer Magazin Forenübersicht
 

Zurück   WCM Forum > Rat & Tat > Programmierung

Programmierung Rat & Tat für Programmierer

Microsoft KARRIERECAMPUS

Antwort
 
Themen-Optionen Ansicht
Alt 08.10.2001, 18:51   #1
Who-T
Elite
 
Registriert seit: 01.08.2000
Beiträge: 1.395


Who-T eine Nachricht über ICQ schicken
Standard PHP - Objekte - Arrays

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
Who-T ist offline   Mit Zitat antworten
Alt 08.10.2001, 20:51   #2
helios
Veteran
 
Registriert seit: 21.06.2001
Beiträge: 343


helios eine Nachricht über ICQ schicken
Standard

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
helios ist offline   Mit Zitat antworten
Alt 08.10.2001, 21:51   #3
Who-T
Elite
 
Registriert seit: 01.08.2000
Beiträge: 1.395


Who-T eine Nachricht über ICQ schicken
Standard

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
Who-T ist offline   Mit Zitat antworten
Alt 08.10.2001, 22:07   #4
helios
Veteran
 
Registriert seit: 21.06.2001
Beiträge: 343


helios eine Nachricht über ICQ schicken
Standard

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
helios ist offline   Mit Zitat antworten
Alt 09.10.2001, 10:44   #5
Who-T
Elite
 
Registriert seit: 01.08.2000
Beiträge: 1.395


Who-T eine Nachricht über ICQ schicken
Standard

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.
Who-T ist offline   Mit Zitat antworten
Alt 10.10.2001, 00:38   #6
helios
Veteran
 
Registriert seit: 21.06.2001
Beiträge: 343


helios eine Nachricht über ICQ schicken
Standard

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
helios ist offline   Mit Zitat antworten
Alt 10.10.2001, 09:46   #7
Who-T
Elite
 
Registriert seit: 01.08.2000
Beiträge: 1.395


Who-T eine Nachricht über ICQ schicken
Standard

*riesensteinvomherzenfall*

danke, das wars wirklich!

bin vom java scheinbar die pointer schon zu gewöhnt
Who-T ist offline   Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:28 Uhr.


Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Forum SEO by Zoints
© 2009 FSL Verlag