dynamische Klasseneigenschaft $$value in php

Lesezeit: 2 Minuten

Wie kann ich auf eine Klasseneigenschaft verweisen, wenn ich nur eine Zeichenfolge kenne?

class Foo
{
    public $bar;

    public function TestFoobar()
    {
        $this->foobar('bar');
    }

    public function foobar($string)
    {
         echo $this->$$string; //doesn't work
    }
}

Was ist der richtige Weg, um die Zeichenfolge auszuwerten?

Sie müssen nur ein $ verwenden, wenn Sie mit einer String-Variablen auf die Mitgliedsvariable eines Objekts verweisen.

echo $this->$string;

  • Diese Syntax kann in php7(.1?)+ Herausforderungen haben, folgen Sie Ricks Antwort unten, damit sie dort richtig funktioniert.

    – Jerod Venema

    30. Dezember 2019 um 19:43 Uhr

Benutzer-Avatar
Rick

Wenn Sie einen Eigenschaftswert verwenden möchten, um den Namen einer Eigenschaft zu erhalten, müssen Sie “{“-Klammern verwenden:

$this->{$this->myvar} = $value;

Auch wenn es sich um Objekte handelt, funktionieren sie:

$this->{$this->myobjname}->somemethod();

  • Erstaunlich, dass PHP diese Strukturen zulässt! Kann aber für andere auch recht vage sein

    – melledijkstra

    10. Februar 2017 um 18:31 Uhr

  • Es ist auch praktisch, wenn Sie Literale mit dynamischen Variablen kombinieren, z. B.: $this->{"my_prop_".$i}

    – jave.web

    21. August 2017 um 14:54 Uhr

Benutzer-Avatar
Matthäus H.

Wie die anderen bereits erwähnt haben, sollte $this->$string ausreichen.

Dies jedoch

$this->$$string;

wird die Zeichenfolge tatsächlich auswerten und das Ergebnis davon erneut auswerten.

$foo = 'bar';
$bar="foobar";
echo $$foo; //-> $'bar' -> 'foobar'

du warst ganz nah. Sie haben gerade 1 zusätzliches $-Zeichen hinzugefügt.

public function foobar($string)
{
     echo $this->$string; //will work
}

echo $this->$string; //should work

Du brauchst nur $$string beim Zugriff auf eine lokale Variable, deren Name nur in einer Zeichenfolge gespeichert ist. Da greift man normalerweise in einer Klasse gerne zu $obj->propertySie müssen nur einen hinzufügen $.

Benutzer-Avatar
Samson

Um sich an die genaue Syntax zu erinnern, denken Sie daran, dass Sie a verwenden $ mehr als Sie normalerweise verwenden. Wie Sie verwenden $object->property um auf eine Objekteigenschaft zuzugreifen, dann ist der dynamische Zugriff erledigt $object->$property_name.

1014910cookie-checkdynamische Klasseneigenschaft $$value in php

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy