Erste Referenz auf array-element array ist zugänglich wie $obj->$propName
Angenommen, wir haben diesen code (Vereinfachtes Beispiel):
$propertyName = 'items';
$foo = new \stdClass;
$foo->$propertyName = array(42);
An dieser Stelle ich 'd wie zu schreiben, ein Ausdruck, dessen Wert eine Referenz auf den Wert innerhalb des array.
Ist es möglich, dies zu tun? Wenn ja, wie?
Eine Antwort, die "den job machen", sondern ist nicht, was ich 'm suchen, ist dieses:
//Not acceptable: two statements
$temp = &$foo->$propertyName;
$temp = &$temp[0];
Aber warum schreiben Sie es als zwei Aussagen? Gut, denn das wird nicht funktionieren:
//Will not work: PHP's fantastic grammar strikes again
//This is actually equivalent to $temp = &$foo->i
$temp = &$foo->$propertyName[0];
Natürlich &$foo->items[0]
ist eine weitere inakzeptable Lösung, denn es behebt den Namen der Eigenschaft.
Falls sich jemand wundert über die seltsamen Anforderungen: ich 'm tun dies in einer Schleife, wo $foo
selbst ist ein Verweis auf einige Knoten innerhalb eines Graphen. Jede Lösung unter Einbeziehung $temp
würde eine unset($temp)
danach, so dass die Einstellung $temp
auf die nächste iteration nicht komplett versauen den Graphen; dieser unset
Anforderung kann übersehen werden, wenn Sie nicht extrem vorsichtig, um Verweise, so Frage ich mich, ob es einen Weg gibt, um dieser code zu schreiben, so dass es weniger Möglichkeiten für die Einführung eines bug.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mehrdeutige Ausdrücke wie, die brauchen etwas Hilfe für den parser:
Btw, dies ist die gleiche, unabhängig davon, ob Sie suchen für die variable ein alias (ein.k.ein. Referenz) oder nur den Wert. Beide benötigen Sie, wenn Sie mithilfe der array-access-notation.
&{$foo->$propertyName}[0]
ist eine compile-Zeit-Fehler... PHP, ich Liebe dich so viel mehr jetzt. Vielen Dank 🙂Es dauerte einige zu googeln, aber ich fand die Lösung:
Druckt
43 array(43)
.Fand ich die Lösung in diesem Artikel: Den Verweis auf ein array in ein Objekt "variable" - Eigenschaft von Jeff Beeman