Binden Sie benutzerdefinierte Methodenparameter an Klassenattribute
<p>Gibt es innerhalb einer Klasse eine Möglichkeit, ein Klassenattribut an einen Methodenparameter zu binden, sodass bei Strg+Klick eine bidirektionale Verknüpfung hergestellt wird? </p>
<pre class="brush:php;toolbar:false;">class Attachments erweitert das Repository
{
öffentliche Dokumente $documents;
öffentliche Funktion fromDocuments(callable $scope)
{
$this->scopeOnRepoProperty($scope, 'documents');
}
}
</pre>
<p>Ich meine, in diesem Fall sollte der zweite Parameter „documents“ in der Methode „scopeOnRepoProperty()“ auf die Eigenschaft „$documents“ verweisen. <br /><br />Der breitere Kontext ist: <br />Das Problem besteht darin, dass ein großer Teil des Codes sehr ähnlich ist, d. h. die meisten ScopeXXX/fromXXX-Methoden tun etwas Ähnliches, d. h. Eigenschaften-Repository wird als Parameter an die Methode übergeben. Im obigen Beispiel würde beispielsweise $scope($this->documents) ausgeführt. Wenn $this->documents nicht initialisiert würde, würde außerdem eine neue Instanz erstellt. <br /><br />Der Code sieht also so aus:</p><p><br /></p>
<pre class="brush:php;toolbar:false;">öffentliche Funktion fromDocuments(callable $scope)
{
if (!isset($this->documents)) {
$this->documents = new Documents();
}
$scope($this->documents);
}
</pre>
<p>Ich wollte vermeiden, jedes Mal eine if-Anweisung zu schreiben, ein neues Objekt zu erstellen und eine Methode aufzurufen, also dachte ich, ich könnte es mit einer Methode schaffen, die ein aufrufbares Objekt, einen Eigenschaftsnamen und eine Typreflexion akzeptiert Klassenname. </p><p>Der Code läuft einwandfrei, aber leider verliere ich durch diesen Ansatz die Bindung an diese Eigenschaften. In früheren Versionen war es $this->documents, daher war der Link vorhanden, aber das ist nicht mehr der Fall. </p><p>Ich würde gerne wissen, ob es eine Möglichkeit gibt, dies zu erreichen. Irgendwelche Ideen? </p><p><br /></p>