Ankündigung

Einklappen
Keine Ankündigung bisher.

Objekt-Property über Array ansprechen

Einklappen

Neue Werbung 2019

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

  • Objekt-Property über Array ansprechen

    Hallo,

    ich scheitere bei folgendem Problem und scheitere leider auch bei der Google-Suche, da ich nicht genau weiß, wie ich das Problem benennen soll...

    Sagen wir, ich habe eine Objekt-Property $obj->p1->p2->p3 und ich habe ein Array $arr = array( 'p1', 'p2', 'p3 ). Wie kann ich es nun so zusammenbasteln, dass ich die entsprechende Property ansprechen kann?

    Beispiel:

    function getProperty( $obj, $arr ) {
    //hier kommt der Code, den ich suche
    return $obj_prop;
    }

    Aufruf so: $wert = getProperty( $obj, array( 'p1', 'p2', 'p3') );
    Zurückgegeben werden soll eben der Inhalt von $obj->p1->p2->p3.

    Besonderheit: ich weiß nicht(!) vorher, was in $arr enthalten ist, es kann also auch array( 'p1', 'p2' ) sein.

    Weiß jemand Rat?


  • #2
    Zurückgegeben werden soll eben der Inhalt von $obj->p1->p2->p3
    Keine Ahnung was du damit meinst. Und willst du denn einzelne Werte zurückgeben, oder alle properties die du auch per Array übergibst?
    PHP-Code:
    function getProperty($obj, array $propertiesToGet){
        foreach (
    $propertiesToGet as $property){
            if(
    property_exists(get_class($obj), $property)){
                
            }
        }

    Relax, you're doing fine.
    RTFM | php.de Wissenssammlung | Datenbankindizes | Dateien in der DB?

    Kommentar


    • #3
      Oder suchst du das?
      PHP-Code:
      //Test-objekt
      $obj->p1->p2->p3 "obj123";

      $objPath = array( 'p1''p2''p3' );

      $result = clone($obj);
      foreach(
      $objPath as $k) {
        
      $result $result->{$k};
      }

      echo 
      $result;  //obj123 
      PHP-Klassen auf github

      Kommentar


      • #4
        Ja, so habe ich das bisher auch gelöst:

        PHP-Code:
        function getPropertyValue$obj$property ) {
                foreach( 
        $property as $p ) {
                    
        $obj $obj->{$p};
                }

                return 
        $obj;
        }

        $obj->p1->p2->p3 'testwert';

        $property = array( 'p1''p2''p3' );

        $val getPropertyValue$obj$property ); // = 'testwert' 
        Ich dachte nur, da gibt es evtl. eine schnellere und elegantere Lösung.

        Sorry für die etwas doof gestellte Frage, aber ich habe immer meine Schwierigkeiten, PHP-Code und Anforderungen zu verbalisieren.

        Kommentar


        • #5
          Ist das wirklich schon die eleganteste Methode, dieses Problem zu lösen?

          Falls jemand noch Vorschläge hat, immer gern her damit.

          Kommentar

          Lädt...
          X