Signatur
Beschreibung
uopz_get_property() gehört zur UOPZ-Erweiterung (User Operations for Zend) und ermöglicht es, den Wert einer beliebigen Eigenschaft einer Klasse oder eines Objekts auszulesen – unabhängig von der Sichtbarkeit (public, protected oder private). Dies ist besonders nützlich in Unit-Tests, wenn der interne Zustand eines Objekts überprüft werden soll, ohne die API des Objekts zu verändern.
Als erstes Argument kann entweder ein Objekt (für Instanzeigenschaften) oder ein Klassenname als String (für statische Eigenschaften) übergeben werden. Das zweite Argument ist der Name der gesuchten Eigenschaft als Zeichenkette.
Im Gegensatz zu Reflection oder Workarounds über Closure::bind() bietet uopz_get_property() einen direkten, unkomplizierten Weg, auf versteckte Eigenschaften zuzugreifen. Diese Funktion sollte ausschließlich in Testumgebungen eingesetzt werden und nie in Produktionscode, da sie die Kapselung (Encapsulation) als fundamentales OOP-Prinzip umgeht.
- Für Instanzeigenschaften: Objekt als erstes Argument übergeben.
- Für statische Eigenschaften: Klassenname (String) als erstes Argument übergeben.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $class Pflicht | object|string | Ein Objekt (für Instanzeigenschaften) oder der Name einer Klasse als string (für statische Eigenschaften). |
|
| $property Pflicht | string | Der Name der Eigenschaft, deren Wert abgerufen werden soll. |
Rückgabewert
null zurückgegeben.Beispiele
Private Instanzeigenschaft in einem Unit-Test auslesen
<?php
class BankAccount
{
private float $balance = 1500.75;
public function deposit(float $amount): void
{
$this->balance += $amount;
}
}
$account = new BankAccount();
$account->deposit(200.0);
// Internes Guthaben direkt prüfen (z. B. in einem PHPUnit-Test)
$balance = uopz_get_property($account, 'balance');
var_dump($balance);
Statische private Eigenschaft einer Klasse auslesen
<?php
class Registry
{
private static array $entries = ['foo' => 'bar', 'baz' => 42];
public static function register(string $key, mixed $value): void
{
self::$entries[$key] = $value;
}
}
Registry::register('qux', true);
// Statische Eigenschaft per Klassenname abrufen
$entries = uopz_get_property(Registry::class, 'entries');
var_dump($entries);
// Wichtig · Fallstricke
Achtung: Die UOPZ-Erweiterung ist primär für Testzwecke entwickelt worden und sollte niemals in Produktionsumgebungen eingesetzt werden. Das Umgehen von Sichtbarkeitsregeln kann zu unvorhergesehenem Verhalten führen und die Wartbarkeit des Codes erheblich verschlechtern.
Die Verfügbarkeit der Funktion hängt davon ab, dass die uopz-Erweiterung geladen ist. Andernfalls wird ein fataler Fehler ausgelöst. Auf vielen Produktionsservern ist UOPZ nicht installiert – was auch so sein sollte.
Für ähnliche Aufgaben in produktionsnahem Code sollte stattdessen ReflectionProperty mit setAccessible(true) (PHP < 8.1) bzw. direkt (PHP >= 8.1) verwendet werden.