PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   Den I'nhalt eines Objektes ausgeben (http://www.selfphp.de/forum/showthread.php?t=26100)

Doc_McSky 30.01.2018 18:46:31

Den I'nhalt eines Objektes ausgeben
 
Hallo zusammen,

mit objektorientierter Programmierung hapert es noch deutlich bei mir, daher muss ich einfach mal fragen, da ich nicht weiß, wie ich auf den Inhalt eines Objektes zugreifen kann.
Ich habe ein SDK mit etlichen Klassen und das erstellt mir nach Übergabe aller Parameter eine "Response", die alle notwendigen Infos enthält. Auf die möchte ich jetzt zugreifen. :)

Die endgültige Ausführung mit der die Antwort erzeugt wird sieht dann so aus:
PHP-Code:

... // $data wird gefüllt...
$response $data->createService();

var_dump($response); 

Mit dem Var-Dump bekomme ich alle Informationen, aber wie komme ich an die Inhalte um Sie in Variablen weiterzuverarbeiten?

Der VarDump liefert folgende Syntax (Ausschnitt):
Code:

object(test\SDK\Response)#33 (13) {
  ["service_number":"test\SDK\Response":private]=>
  string(18) "123456789018470088"
  ["piece_number":"test\SDK\Response":private]=>
  NULL
  ["statusMessage":"test\SDK\Response":private]=>
  array(2) {
    [0]=>
    string(49) "Die Servicenummer ist uns aktuell nicht bekannt."
    [1]=>
    string(21) "Unbekannter Service."
  }
  ... mehr Inhalt ...
}

Wie bekomme ich z.B. die Servicenummer ausgegeben oder den Text "Unbekannter Service"?

Danke für eure Hilfe einem Dummie... ;)

chorn 31.01.2018 07:04:09

AW: Den I'nhalt eines Objektes ausgeben
 
http://php.net/manual/de/sdo.sample.getset.php

Beispiel #5

Doc_McSky 31.01.2018 12:26:03

AW: Den I'nhalt eines Objektes ausgeben
 
Hallo,

ja, danke.
Also sollte ich das Objekt als einen XML Aufbau verstehen? Sorry, das ich echt wie ein Ochse vor dem Berg stehe gerade...

Wenn ja und ich das anwende wie in dem PHP-Manual beschrieben darauf zugreife, dann habe ich folgendes versucht:
PHP-Code:

echo $response->service_number

Hier gab er mir folgenden Fehler aus:
Code:

Cannot access private property test\SDK\Response::$service_number in Datei-bla Line xy
Ok. Dann habe ich gesucht um nach offensichtlich geschützten Objektinhalten zuzugreifen und das gefunden:
PHP-Code:

$myClassReflection = new ReflectionClass(get_class($response));
$out $myClassReflection->getProperty('service_number');
$out->setAccessible(true);
print_r($out); 

Na prima, keine Fehler, aber in $out steht nur der Rest der Schlüssel aus dem Objekt, also:
Code:

ReflectionProperty Object
(
    [name] => service_number
    [class] => test\SDK\Response
)

Na prima und wo ist jetzt der Inhalt geblieben? -_-
Oh mein Gott ist das jetzt so kompliziert oder ist der Wald einfach zu dicht um den zu sehen?
Mir fällt nichts mehr ein wie ich an meine Werte komme in dieser Variablen $response :(

Habe dann nochmal diese Geschichte mit get_class() gegoogelt und das soll ja die Klassen zurückliefern, die da wohl beteiligt sind, ok, macht es ja wohl, habe dann get_object_vars() gefunden, dachte das holt mir die Werte, aber nix da, liefert nur ein leeres Array.
Ich weiß nicht mehr weiter...

chorn 31.01.2018 12:52:23

AW: Den I'nhalt eines Objektes ausgeben
 
Wenn die Eigenschaften private sind, dann ist nicht vorgesehen, dass du auf die Eigenschaft direkt zugreifst - z.B. als Schreibschutz. Dann bietet dir das SDK entweder eine Methode an, um diese Eigenschaft auszulesen, oder das ist einfach nicht vorgesehen, und das SDK muss von dir oder dem Autor angepasst werden.

Doc_McSky 31.01.2018 15:11:52

AW: Den I'nhalt eines Objektes ausgeben
 
Danke.
Habe mit dem Ersteller des SDK geschrieben, es gibt tatsächlich eine Methode um darauf zugreifen zu können, habe allerdings auch die Stelle gefunden in den Klassen, wo ich die Variablen von "private" auf "public" setzen könnte und dann kann ich auch auf die Daten des Objekts zugreifen.
Das war mir nicht klar dass das Objekt dadurch die Ausgabe verweigert, muss man ja erstmal lernen. Wieder etwas schlauer. :)

Jetzt geht es aber - mehr oder weniger. Danke.


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:52:17 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.