In der PHP-Entwicklung sind Objekte sehr häufige Datentypen. Innerhalb des Objekts enthält es viele verschiedene Elemente: Eigenschaften, Methoden, Konstanten usw.
In PHP können die privaten Methoden von Objekten nicht direkt aufgerufen werden. Manchmal müssen wir jedoch die Rückgabewerte dieser privaten Methoden in Arrays konvertieren, damit unsere Programme diese Daten besser verarbeiten können.
In diesem Artikel untersuchen wir, wie man private Methoden in einem PHP-Objekt in ein Array umwandelt, damit wir diese Daten besser verarbeiten und nutzen können.
1. Private Methoden von Objekten
In einem PHP-Objekt können private Methoden nicht extern aufgerufen werden. Das heißt, wenn wir eine private Methode aufrufen und ihren Rückgabewert erhalten möchten, müssen wir sie innerhalb des Objekts aufrufen und dann ihren Rückgabewert durch eine Methode übergeben.
Zum Beispiel haben wir eine Klasse namens Foo, die eine private Methode namens getPrivateData() enthält:
class Foo { private function getPrivateData() { return array('name' => 'John', 'age' => 30); } }
Da getPrivateData() eine private Methode ist, können wir sie nicht aufrufen es direkt extern, wie zum Beispiel:
$foo = new Foo(); $data = $foo->getPrivateData(); // 错误!无法访问私有方法
Zu diesem Zeitpunkt benötigen wir einige Fähigkeiten, um den Rückgabewert der getPrivateData()-Methode zu erhalten.
2. Konvertieren Sie die private Methode des Objekts in ein Array
Eine Lösung besteht darin, eine öffentliche Methode innerhalb der Klasse hinzuzufügen, diese Methode zum Aufrufen der privaten Methode zu verwenden und Fügen Sie es dann hinzu. Der Rückgabewert wird ausgegeben.
class Foo { private function getPrivateData() { return array('name' => 'John', 'age' => 30); } public function getPrivateDataArray() { return $this->getPrivateData(); } }
Auf diese Weise können Sie den Rückgabewert von getPrivateData() erhalten, indem Sie die Methode getPrivateDataArray() extern aufrufen:
$foo = new Foo(); $data = $foo->getPrivateDataArray(); // 返回array('name' => 'John', 'age' => 30)
Fügen Sie jedoch eine „Wert-Getter“-Methode hinzu Um die privaten Rückgabewerte der Methode zu erhalten, können sie zu Codeduplizierung und einer unübersichtlichen Struktur führen. Daher können wir versuchen, dieses Problem mit eleganteren Methoden zu lösen.
Die Grundidee besteht darin, den Reflexionsmechanismus von PHP zu verwenden, um private Methoden im Objekt über Reflexionsobjekte und -methoden abzurufen und aufzurufen.
Zuerst müssen wir ein Reflexionsobjekt instanziieren, das alle Informationen enthält, die wir zum Abrufen und Aufrufen der privaten Methoden im Objekt benötigen .
$reflection = new ReflectionClass($object);
Wobei $object das Objekt ist, das wir benötigen, um die private Methode abzurufen und sie zum Definieren des Reflexionsobjekts zu verwenden.
Das Reflection-Objekt stellt eine getMethods()-Methode bereit, die ein Array von ReflectionMethod-Objekten zurückgeben kann, die alle Methoden enthalten. Wir können dieses Array durchlaufen, um die gewünschte private Methode zu finden.
//$methods = $reflection->getMethods(); $methods = $reflection->getMethods(ReflectionMethod::IS_PRIVATE); foreach ($methods as $method) { if ($method->getName() === 'getPrivateData') { // 找到getPrivateData方法 } }
Hier verwenden wir den zweiten Parameter der getMethods()-Methode, um private Methoden herauszufiltern. Dann durchlaufen wir dieses Array, verwenden die Methode getName(), um den Methodennamen abzurufen, und finden die private Methode, die wir benötigen, indem wir den Methodennamen abgleichen.
Wenn wir die private Methode finden können, die wir benötigen, müssen wir sie in eine aufrufbare Methode „umwandeln“, damit wir sie verwenden können Rückgabewert erhalten werden kann.
$method->setAccessible(true); $data = $method->invoke($object);
Hier verwenden wir die Methode setAccessible(true), um die private Methode in eine aufrufbare Methode umzuwandeln. Dann verwenden wir die Methode invoke(), übergeben die Objektinstanz, rufen die Methode getPrivateData() auf und erhalten den Rückgabewert.
Jetzt haben wir den Rückgabewert der privaten Methode erfolgreich erhalten, aber wir brauchen um es zu konvertieren. In ein indiziertes Array konvertieren. Wir können die Funktion array_values() verwenden, um diesen Vorgang auszuführen.
$data = array_values($data);
Durch den obigen Prozess haben wir die private Methode in einem PHP-Objekt erfolgreich in ein Array konvertiert. Im Folgenden wird der Vorgang zum Zusammenführen dieser Arrays zu einem neuen Array beschrieben.
$reflection = new ReflectionClass($object); $methods = $reflection->getMethods(ReflectionMethod::IS_PRIVATE); $data = array(); foreach ($methods as $method) { if ($method->getName() === 'getPrivateData') { $method->setAccessible(true); $result = $method->invoke($object); $data = array_merge($data, array_values($result)); } }
Hier verwenden wir die Funktion array_merge(), um alle Arrays zu einem Array zusammenzuführen. Dieses Array enthält die Rückgabewerte aller privaten Methoden.
3. Zusammenfassung
In diesem Artikel haben wir untersucht, wie man private Methoden in einem PHP-Objekt in ein Array konvertiert. Um dieses Ziel zu erreichen, verwenden wir den Reflexionsmechanismus von PHP, um private Methoden im Objekt über Reflexionsobjekte und -methoden abzurufen und aufzurufen. Auf diese Weise können wir die Rückgabewerte dieser privaten Methoden erhalten und sie in Arrays konvertieren, damit wir diese Daten besser verarbeiten und nutzen können.
Es ist zu beachten, dass diese Methode zwar die gewünschten Ergebnisse erzielen kann, in einigen Fällen jedoch die Lesbarkeit und Wartbarkeit des Codes beeinträchtigen kann. Daher sollten wir uns in der tatsächlichen Entwicklung dafür entscheiden, je nach Bedarf und tatsächlichen Bedingungen unterschiedliche Lösungen zu verwenden.
Das obige ist der detaillierte Inhalt vonSo konvertieren Sie die private Methode eines PHP-Objekts in ein Array. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!