WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   Aus $_SESSION array Objects erstellen (http://www.wcm.at/forum/showthread.php?t=223541)

iG0r 26.09.2007 20:36

Aus $_SESSION array Objects erstellen
 
Hab anscheinen ein kleines Problem mit der Syntax, da immer nur das 1. Object erstellt wird :(

Bitte um Hilfe :-)

PHP-Code:

$i 0;
foreach (
$_SESSION['myPage']['items'] AS $key => $value)
{
         
$i++;
         
         
$item[$i] = new Item();
         
         
$item[$i]->setNumber($i);
       
$item[$i]->setItemId($key);
       
$item[$i]->setQuantity($value);
       
       
$request->addItem($item[$i]);


Es wird damit ein XML-File erstellt, leider scheint nur immer das 1. Item auf. Jedes andere wird ignoriert. Hab testweise eine Summenprüfung eingebaut gehabt, ob der Loop auch wirklich durchläuft, tut er, also muss der Fehler irgendwo in meiner Syntax sein. Setzt man die Items per Hand scheinen sie auch auf.

Hat jemand Rat?
Danke.

iG0r 26.09.2007 21:12

Bin dumm ... ist ja jetzt ein array und die Class function will durchnummerierte Objects, zb $item_1, $item_2, ...

Mit $item.$i-> geht es auch nicht. Kann man Objects eigentlich durchnummierieren?

zAPPEL 26.09.2007 22:09

Hm.. mit "eval" könnte es evt. funktionieren.. (?):

eval ("$item_".$i." = new Item()");

Aber keine Ahnung ob das so gescheit ist :-)

iG0r 26.09.2007 23:35

Mit eval hatte ich es auch schon versucht, scheint aber nicht wirklich zu klappen :(

Wollte auch schon tricksen mit:

PHP-Code:

$item '$item'.$i

Also $item wird dann als $item1, $item2, ... usw. zurück gegeben, aber das Object kommt damit anscheinend nicht klar.

jak 27.09.2007 22:08

Prinzipiell sollte so etwas mit variablen Variablen machbar sein:
Variante 1:
Code:

$i = 0;
foreach ($_SESSION['myPage']['items'] AS $key => $value) {
  $i++;
  $name_der_var = 'item_'.$i
  $$name_der_var = new Item();
  ...
  $request->addItem($$name_der_var);
}

Variante 2: geschwungene Klammern
...
${'item_'.$i} = new Item();
...

Außerdem sollte es noch eine dritte Variante geben:
Code:

foreach ...{
  ...
  $item = = new Item();
  ...
  $request->addItem($item);
  ...
}

D.h. man spart sich das ganze dynamische benennen. Ich hab' im Moment gerade kein PHP installiert, daher kann ich die 3.Variante nicht überprüfen. $request->addItem sollte aber eine Kopie von $item anlegen, ich glaube nicht das man das es nur eine Referenz ist. Bin mir aber nicht sicher -> ausprobieren.

jak

iG0r 28.09.2007 11:23

Danke.

Ich habs schon gelöst, in dem ich die Function in der Class umgeschrieben habe ;)

Dachte mir, wenn ich keine Lösung habe, muss ich die Ursache beseitigen.

Werde aber deine Vorschäge auf jeden Fall testen, ich will ja auch was lernen :-)


Alle Zeitangaben in WEZ +2. Es ist jetzt 00:37 Uhr.

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