wie object stdClass prüfen und auslesen |
elster
Otto-Normal-Poster Threadstarter
Beiträge: 61 |
Hallo,
könnte mir jemand sagen, wie ich auf 'city' zugreifen kann.
object(JForm)#329 (5) {
["data":protected]=>
object(JRegistry)#330 (1) {
["data":protected]=>
object(stdClass)#331 (2) {
["profile"]=>
object(stdClass)#344 (9) {
["city"]=>
string(0) ""
}}}}
Ich kapiere/sehe das irgendwie momentan nit :((
habe schon diverse Variationen ($profile->city, ...) probiert.
ich wollte checken, ob in den profile-arrays etwas enthalten ist
vielen Dank Grüße, elster
|
 Profil
Editieren
Zitieren
|
Ori
Mausakrobat
Beiträge: 162 |
Das sind ziemlich viele ineinander geschachtelte Objekte. Es könnte so gehen:
1: | $jformding->data->data->profile->city |
Beachte aber, dass du nur protected-Zugriff auf die oberen beiden Eigenschaften hast. D.h. du musst dich sowohl in einer abgeleiteten Klasse von JForm als auch von JRegistry befinden, um darauf zugreifen zu können. Das ist aber vermutlich nicht möglich.
Stattdessen brauchst du dann entsprechende, abgeleitete Klasse, die dir die jeweiligen Eigenschaften zur Verfügung stellen:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14: | class Eins extends JForm {
public static function getData(JForm $jform) {
return $jform->data;
}
}
class Zwei extends JRegistry {
public static function getData(JRegistry $jreg) {
return $jreg>data;
}
}
// Auslesen via
Zwei::getData(Eins::getData($jformding))->profile->city
|
Aber schön ist das nicht und vermutlich auch so nicht vom Erfinder der Klassen JForm und JRegistry gedacht. Und vielleicht darfst du die Klassen auch nicht ableiten, dann darfst du die Eigenschaften gar nicht erst auslesen.
|
 Profil
E-Mail
Website
Editieren
Zitieren
|
elster
Otto-Normal-Poster Threadstarter
Beiträge: 61 |
Hi Ori,
Danke - dufte verständliche Antwort mit einem bisschen Hintergrund!
Mittlerweile hatte ich etwas gefunden. 1: | $fields = $this->item->profile->getFieldset('profile'); |
$this bedeutet doch, dass man noch Zugriff auf Klassenwerte hat.
Mit deinem Tipp ist nicht an das profil-array ranzukommen:
echo $JForm->data->data->profile->city; blieb leer. und
das vorgeschlagene Schema abgeleiteter Klassen ergab
1: | Catchable fatal error: Argument 1 passed to Eins::getData() must be an instance of JForm, null given, called in ... |
viele Grüße, elster
Diese Nachricht wurde geändert von: elster |
 Profil
Editieren
Zitieren
|
Ori
Mausakrobat
Beiträge: 162 |
Genau, $this zeigt immer auf die aktuelle Instanz der Klasse, in der du gerade bist.
Der Wert von city ist tatsächlich ein leerer String. (Das steht in deiner print_r()-Ausgabe im ersten Beitrag.)
Wie die Variable mit deiner Instanz von JForm heißt, kann ich nicht raten. Ich habe sie $jformding getauft; den Variablennamen musst du durch den echten ersetzen.
|
 Profil
E-Mail
Website
Editieren
Zitieren
|
elster
Otto-Normal-Poster Threadstarter
Beiträge: 61 |
Hi Ori, 1: | Zwei::getData(Eins::getData($this->item->profile))->city; |
gibt nichts aus, bleibt leer, obwohl was im array enthalten ist. Die Struktur sieht so aus (aus print_r):
ContactViewContact Object (
[state:protected] => JObject Object (
...
[profile] => JForm Object (
[data:protected] => JRegistry Object (
[data:protected] => stdClass Object (
[profile] => stdClass Object (
[city] => "downtown"
...
vielleicht ist da irgendwo in dem Framework noch was "gedeckelt" oder meine Variablennamen stimmen nicht?
Grüße, elster
|
 Profil
Editieren
Zitieren
|
Ori
Mausakrobat
Beiträge: 162 |
Ich blicke immer noch nicht ganz durch deine Objekte durch. Das ist die Ausgabe von print_r($this) und du bist in ContactViewContact (ein seltsamer Name für eine Klasse)?
Und ich muss nochmal darauf hinweisen, dass solch ein Zugriff mit Sicherheit nicht vom Erfinder der Klassen, die du benutzt, gewollt ist. Eigentlich solltest du auf anderem Weg Zugriff auf diese Eigenschaft haben. Da muss es doch irgendwo eine Doku geben…
|
 Profil
E-Mail
Website
Editieren
Zitieren
|
raiserle
Mausakrobat
Beiträge: 172 |
Naja, solange es protected ist, kann man es wie in einem Post weiter oben machen.
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14: | state->profile->data->data->profile->city;
}
#......
}
?>
|
Warum und wieso man solche Strukturen schafft... ist mir zu entfernt... ;)
Aber probiers mal so - sollte gehen.
---
Irren is Menschlich
Wer andern eine Grube gräbt,
sollte darüber nachdenken,
ob sie tief genug ist!!!!
Kameradschaft ist, wenn der
Kamerad schafft !!!!
|
 Profil
Editieren
Zitieren
|
elster
Otto-Normal-Poster Threadstarter
Beiträge: 61 |
hi raiserle, Danke!
Ja so ähnlich. Habs mittlerweile gelöst. Es ist schon eine Weile her, aber in etwa so:
$fields = $this->item->profile->getFieldset('profile');
und
foreach ($fields as $profile) {
und
$profile->city } ...
Grüße
|
 Profil
Editieren
Zitieren
|