Wie kann man eine PHP-Klasse-Eigenschaft mittels einer Zeichenfolge abrufen?

In PHP können Sie den $-Operator verwenden, um die Eigenschaften eines Objekts nach Namen aufzurufen. Wenn Sie zum Beispiel eine Klasse "MyClass" mit einer Eigenschaft "myProperty" haben, können Sie die Eigenschaft wie folgt abrufen:

<?php

class MyClass
{
  /**
   * @var int
   */
  private int $myProperty;

  public function __construct()
  {
    $this->myProperty = 0;
  }

  public function getMyProperty(): int
  {
    return $this->myProperty;
  }

  public function setMyProperty(int $value): void
  {
    $this->myProperty = $value;
  }
}

$object = new MyClass();
$propertyValue = $object->getMyProperty();
echo "The value of the myProperty is: " . $propertyValue;

Wenn Sie den Eigenschaftsnamen als Zeichenfolge haben, können Sie die Syntax ${} verwenden, um die Eigenschaft nach Namen abzurufen:

<?php

class MyClass
{
  public $myProperty = "Hello, world!";
}

$object = new MyClass();
$propertyName = 'myProperty';
$propertyValue = $object->{$propertyName}; // use the ->{} operator to access the property dynamically

echo $propertyValue; // Output: Hello, world!

Alternativ können Sie auch ->{} verwenden:

<?php

class MyClass
{
  /**
   * @var int
   */
  private int $myProperty;

  public function __construct()
  {
    $this->myProperty = 0;
  }

  public function getMyProperty(): int
  {
    return $this->myProperty;
  }

  public function setMyProperty(int $value): void
  {
    $this->myProperty = $value;
  }
}
$object = new MyClass();
$propertyName = 'getMyProperty';
echo $propertyValue = $object->{$propertyName}();

Es ist auch zu beachten, dass Sie auch die __get Magie-Methode in der Klasse verwenden können, um den Eigenschaftswert zurückzugeben.

<?php

class MyClass
{
  public $myProperty;

  public function __get($property)
  {
    if (property_exists($this, $property)) {
      return $this->$property;
    } else {
      echo "The property '$property' does not exist in this class.";
    }
  }
}

$object = new MyClass();
$propertyName = 'nonExistentProperty';
$propertyValue = $object->$propertyName; // this will trigger __get

// Output: The property 'nonExistentProperty' does not exist in this class.

Beachten Sie, dass dies nur funktioniert, wenn die Eigenschaft in der Klasse vorhanden ist und nicht geschützt oder privat ist.