Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Verschachteltes Objekt erstellen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Verschachteltes Objekt erstellen

    Hallo liebe PHP.de Community,

    ich stehe gerade völlig auf dem Schlauch und brauche eure Hilfe.

    Ich habe für einen SoapService eine WSDL erstellt die eine Methode getStatus() vorsieht. Der Output-Typ der Methode wurde in der WSDL wie folgt festgelegt:

    PHP-Code:
    <xsd:element name="getStatus_Out">
       <
    xsd:complexType>
          <
    xsd:sequence>
             <
    xsd:element name="out" type="xsd1:status"></xsd:element>
          </
    xsd:sequence>
       </
    xsd:complexType>
    </
    xsd:element>

    <
    xsd:complexType name="status">
       <
    xsd:sequence>
          <
    xsd:element name="ID" type="xsd:int"></xsd:element>
          <
    xsd:element name="Status" type="xsd:string"></xsd:element>
       </
    xsd:sequence>
    </
    xsd:complexType
    Wenn ich also in meiner Soap-Methode den entsprechenden Datentyp zurückgeben möchte so mache ich das derzeit wie folgt:

    PHP-Code:
    public function getStatus() {
       
    $result = new stdClass();
       
    $result->out->ID '001';
       
    $result->out->Status 'My Status Description';
       return 
    $result;

    Das funktioniert auch soweit tadelos. Nun möchte ich aber aus Gründen der Modularisierung und Wiederverwertbarkeit diesen Datentyp als Klasse importieren und instanziieren. Hier komme ich nun leider nicht weiter.

    Folgendes z.B. geht nicht:

    Beispiel 1: Nested class
    PHP-Code:
    class result {
       class 
    out {
          public 
    $ID;
          public 
    $status;
       }

    Ebensowenig funktioniert bei mir die Instanziierung einer weiteren Klasse:

    Beispiel 2: Instanziierung einer anderen Klasse
    PHP-Code:
    class out {
       public 
    $ID;
       public 
    $Status;
    }

    class 
    result {
       
    $out = new out;

    Soo, dass Beispiel 1 nicht geht ist mir eigentlich klar. Dass aber Beispiel 2 nicht geht ist mir jetzt nicht so klar. Scheinbar kann innerhalb der Klasse result die Klasse out nicht gesehen werden obwohl ich beide im gleichen File liegen habe.

    Ich hoffe mir mag jemand weiterhelfen.

    Viele Grüße,
    Tviskjola


  • #2
    Du kannst ein Objekt nicht in der Deklaration erzeugen, verwende dafür den Konstruktor.
    You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.

    Kommentar


    • #3
      Zitat von chorn Beitrag anzeigen
      Du kannst ein Objekt nicht in der Deklaration erzeugen, verwende dafür den Konstruktor.
      Hallo,

      da habe ich mich wohl missverständlich ausgedrückt, entschuldigt.

      Ich möchte von der Konstruktion des Objekts auf diese Art und Weise:
      PHP-Code:
      $result = new stdClass();
      $result->out->ID '001';
      $result->out->Status 'My Status Description'
      ...gerne zur Konstruktion des Objekts mit der gleichen Struktur über die Deklaration und Instanziierung einer Klasse gelangen, habe aber keinen Schimmer wie die Klasse auszusehen hat, da ja Bsp. 1 und Bsp. 2 nicht funktionieren.

      Ich kann ja z.B. ein einfaches Objekt so erstellen:
      File: soapServer.php
      PHP-Code:
      ...
      class 
      status_return {
         public 
      $ID;
         public 
      $Status;
      }

      $status_return = new status_return();
      ... 
      Damit habe ich dann ein Objekt folgender Struktur:
      PHP-Code:
      $status_return->ID
      $status_return
      ->Status 
      Die Frage ist, wie muss aber die Klasse ausschauen wenn ich folgende Struktur haben möchte:
      PHP-Code:
      $status_return->out->ID
      $status_return
      ->out->Status 
      Also zwei Attribute innerhalb eines Objekts, innerhalb eines Objekts.

      Das lange Schwafeln tut mir leid. Ich hatte aber das Gefühl, dass meine Fragestellung falsch interpretiert wurde. Hoffentlich habe ich es jetzt nicht noch schlimmer gemacht...

      Grüße & Danke für eure Zeit,
      Tviskjola

      Kommentar


      • #4
        PHP-Code:
        class result {
           public 
        $out null;

           public function 
        __construct(){
              
        $this->out = new out;
        }

        Edit:
        Wäre dann aber das:
        Du kannst ein Objekt nicht in der Deklaration erzeugen, verwende dafür den Konstruktor.
        Signatur:
        PHP-Code:
        $s '0048656c6c6f20576f726c64';
        while(
        $i=substr($s=substr($s,2),0,2))echo"&#x00$i;"

        Kommentar


        • #5
          Zitat von ByStones Beitrag anzeigen
          PHP-Code:
          class result {
             public 
          $out null;

             public function 
          __construct(){
                
          $this->out = new out;
          }

          Edit:
          Wäre dann aber das:
          Bzw. das hier:
          PHP-Code:
          <?php

          class result_type {
              public 
          $out null;
              
              public function 
          __construct() {
                  
          $this->out = new out;
              }
          }

          class 
          out {
              public 
          $ID null;
              public 
          $Status null;
          }

          $result_type = new result_type;
          var_dump($result_type);

          ?>
          Du hast vollkommen recht. Hab vielen Dank. Ich stand total auf dem Schlauch.

          Kommentar

          Lädt...
          X