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)){
                
            }
        }

    [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
    [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

    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 

      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