Ich entwickle eine Anwendung in PHP, in dem die (jQuery-like) Stil der Verkettungsmethoden extrem praktisch ist. Ich spreche nicht von Vererbungsketten, sondern von einer Taxonomie von Instanzen von Klassen, die ineinander "eingebettet" sind. Jetzt frage ich mich, wie ich von einer niedrigeren Ebene auf eine Instanz auf höherer Ebene verweisen kann.Wie Vorfahren beim Verketten Instanzen der Klassen
Das klingt alles sehr abstrakt, also lassen Sie mich ein Beispiel geben. Nehmen wir an, ich möchte ein Buch (proze) in PHP schreiben (nur aus Gründen der Argumentation). Es ist sehr praktisch, wenn ich dies wie
$myBestseller = new Book();
$myBestseller
->setAuthor("Jean-Saul Partre")
->addChapter()
->addParagraph("How the Rabit lost its wings.")
->addWords("On a beautiful wintes day, the rabit flew over the … ")
->addWords("Bla bla")
->addWords("Bla bla");
Bis jetzt konnte ich es funktioniert. (Soll ich die tatsächlichen Klassendefinitionen einschließen?) Was nun, wenn ich auf eine Eigenschaft eines Objekts in der Hierarchie verweisen möchte? Lassen Sie uns sagen Ich mag würde den Namen des Autors in einem der Titel eines Kapitels gehören:
$myBestseller = new Book();
$myBestseller
->setAuthor("Jean-Saul Partre")
->addChapter()
->addParagrapWithAuthor("How "," fell out of the window.");
->addWords("Bla bla")
->addWords("Bla bla")
->addWords("Bla bla")
var_dump($myBestseller);
Lassen Sie uns nur die Kapitel Klassendefinition hinzufügen, auch hier:
class Chapter{
private $_paragraphs = array();
public function addParagraph($title){
return $this->_pages[] = new Paragraph($title);
}
public function addParagrapWithAuthor($prefix, $suffix){
$author = "Ideo Gram";
return $this->_pages[] = new Paragraph($prefix.$author.$suffix);
}
}
Also, statt $ author = "Ideo Gram" Ich möchte die Definition des Autors des Buches verwenden. Der Titel mit diesem Code wäre
Wie Ideo Gram aus dem Fenster Statt
fiel, würde Ich mag es
sagen, wie Jean-Saul Patre aus dem fiel Fenster
Kann dies getan werden? Die einzige Lösung, die ich bisher gefunden habe, besteht darin, einen Hinweis auf Nachkommen unter dem Tisch zu geben, aber das scheint die Klassen zu verunreinigen.
Vielleicht ist die Antwort sehr geradlinig, aber ich kann es nicht finden. Ich kann die richtigen Bedingungen nicht kennen. :: parent, zum Beispiel, arbeitet mit erweiterten Klassen.
Wenn Sie eine Richtungsunempfindlicher Verbindung zwischen Ihrem entites benötigen, dann in dem Autor des Buches einen Verweis halten (Sie scheinen bereits den Bezug auf den Autor aus dem Buch zu haben). Dies ist der einzige Weg, dies zu tun. Wenn Sie diese Beziehung nicht selbst definieren, sind diese Entitäten völlig unabhängig voneinander. – jobou
Ich bin gespannt, ob in diesem Fall auch die Variadic-Funktion von Interesse ist. Lass mich wissen, was du denkst: https://en.wikipedia.org/wiki/Variadic_function – aguertin
@aguertin Interessanter Gedanke, danke. Schlägst du vor, die "Abstammung" durch diese Variadiac-Funktion zu führen? Wie addCharacter ('æ', $ parent, $ grandparent, $ greatgrandparent, $ greatgreparent)? Ich bin überrascht zu lesen, dass es in PHP gemacht werden kann: http://php.net/manual/en/functions.arguments.php#functions.Variable-arg-Liste – Ideogram