php object array
bolle
- php
Hallo,
ich habe folgendes Problem. Es ist ein Objekt gegen, dass in etwa wie folgt aussieht:
$objekt->$objekte[0]->eigenschaft_1;
$objekt->$objekte[0]->eigenschaft_2;
$objekt->$objekte[1]->eigenschaft_1;
$objekt->$objekte[1]->eigenschaft_2;
..
Ein Objekt beinhaltet also einen Array objekte, wobei jedes Array-Element wiederum ein Objekt ist, dem verschiedene Eigenschaften zugeordnet werden.
Soweit, so gut. Oder so schlecht. Diese Objekte bekomme ich via SOAP geliefert, und das Auslesen ist wirklich supersimpel. Ich habe mein Programm darauf aufgebaut, dass die Struktur immer gleich ist.
Was ich nicht bedacht habe, ist folgender Fall. Wenn es nämlich nur ein objekte gibt, dann ist objekte kein Array mit Objekten, sondern nur ein Objekt.
$objekt->$objekte->eigenschaft_1;
$objekt->$objekte->eigenschaft_2;
...
Ich bin davon ausgegangen, dass der Array Objekte in diesem Fall nur ein Element besitzt:
$objekt->$objekte[0]->eigenschaft_1;
was es nicht tut, sondern wie weiter oben beschrieben objekte dann eben kein Array ist.
Was ich machen müsste, wäre quasi, das Objekt irgendwie zu kopieren:
$temp = array();
$temp[0] = $objekt->$objekte;
$objekt->$objekte[0] = $temp[0];
Da bekomme ich aber dann folgende Fehlermeldung:
PHP Fatal error: Cannot access empty property in /home/test/thetests/xyz/inset/setDone.php on line 22
Hat jemand eine Idee?
Problem gelöst!
Muss zwar ein paar Variablen umbenennen, aber das ist nicht weiter schlimm.
Einfach Objekt in einen Array kopiert und fertig.
Hätte nicht gedacht, dass das so einfach ist.
Gruss
bolle
Hi!
[...] der Array [...]
Nebenbei: Welche Logik steckt eigentlich dahinter, das Array mit "der" zu "artikelieren"? "Der Feld" kann es ja nicht sein.
Aber zum Thema:
if (is_array($objekt->$objekte))
$objekt->$objekte[0]->eigenschaft_1;
else
$objekt->$objekte->eigenschaft_1;
Aber so wie du das da eben notiert hast, verwendest du die Syntax für variable Variablen. $objekte würde in deinem Fall als String ausgewertet und dessen Inhalt als Eigenschaftsname von $objekt zu interpretieren versucht werden. Und dann ist
PHP Fatal error: Cannot access empty property in /home/test/thetests/xyz/inset/setDone.php on line 22
bei
$objekt->$objekte[0] = $temp[0];
erklärlich. $objekte wird nicht existieren oder einen Inhalt haben, der keine Eigenschaft von $objekt benennt und darauf kann man keinen Arrayzugriff setzen. Ein auf E_ALL gestelltes error_reporting hätte vermutlich aufgeklärt, weil es mit einer Notice den Zugriff auf die nicht vorhandene Variable $objekte angezeigt hätte.
Lo!
Hi,
"Ein auf E_ALL gestelltes error_reporting hätte vermutlich aufgeklärt..."
nein, hat es nicht. Aber wie gesagt ist das Problem bereits gelöst, ich hatte nur einen Syntaxfehler.
Hi!
"Ein auf E_ALL gestelltes error_reporting hätte vermutlich aufgeklärt..."
nein, hat es nicht. Aber wie gesagt ist das Problem bereits gelöst, ich hatte nur einen Syntaxfehler.
Dann gehe ich davon aus, dass du das zweite $ in deinen Beispielen
$objekt->$objekte->eigenschaft_1;
in Wirklichkeit gar nicht vorhanden war und ich nur zufällig den Fehler reproduzieren konnte?
Lo!
Hi,
Dann gehe ich davon aus, dass du das zweite $ in deinen Beispielen
$objekt->$objekte->eigenschaft_1;
in Wirklichkeit gar nicht vorhanden war und ich nur zufällig den Fehler reproduzieren konnte?
Exakt! $objekte->objekte->eigenschaft_1 ist korrekt und war nur hier im Forum meinerseits fehlerhaft abgebildet.
Gruß
bolle
Nebenbei: Welche Logik steckt eigentlich dahinter, das Array mit "der" zu "artikelieren"? "Der Feld" kann es ja nicht sein.
als treudummer Self-HTML-Jünger nehme ich alles an, was ich dort aufschnappe.
http://de.selfhtml.org/perl/sprache/listen.htm
"Damit erhält der Array @Tabelle automatisch zwei Elemente (mit den Nummern 0 und 1)."
Gruß bolle