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.