Partielle Klasse in PHP wie in C#
Gibt es eine einfache Möglichkeit zu haben, ein Konzept der partial class in PHP wie haben wir in C#?
Ich habe versucht, es möglich zu machen, mit anderen namespace, aber es könnte nicht funktionieren.
- Warum würden Sie es wollen? ... Das ist eine ehrliche Frage übrigens.
- Könnte sein, dass Sie auf der Suche für Eigenschaften?
- Partielle Klassen werden mehr verwendet, wo Teile der Klasse auto erzeugt (z.B. durch einen Formular-designer, oder ein ORM-system), aber was ' s Ihren Fall hier?
- Schreiben Sie jetzt ich habe eine Klasse, die eine Art chaotisch. Ich will hinzufügen, mehr Methoden, aber ich will nicht zu Chaos-up mit dem vorhandenen code.
- +1 für die Frage eine vernünftige Frage. Partielle Klassen erhöhen können code-Wartbarkeit durch die Verringerung der code-Durcheinander. Sie kann besonders nützlich sein, wie Klassen wachsen in Ihrer Komplexität im Laufe der Zeit durch neue oder veränderte business-Anforderungen. Ich Wünsche PHP unterstützt Sie.
- Es ist eine vernünftige Frage, aber Klasse Komplexität ist nicht ein guter Grund, um es zu unterstützen. Ich würde behaupten, es ist ein schlechter Grund, um ihn zu unterstützen in C#. Code-Generierung ist jedoch ein guter Grund; Designer, EF, etc. Wenn Ihr die Absicht habt, Sie zu umgehen "meine Datei ist zu groß", dann ist es Zeit zum umgestalten der Klasse.
- Der Grund, warum es Hinzugefügt wurde in C# war nicht "Datei ist zu groß und ich möchte vermeiden, refactoring". Der Grund war, dass im Formular-designer eine Menge code wird automatisch generiert, und es war eine chance, dass Ihre hand-written code würde überschrieben werden durch die automatische Generierung von Formular-designer. Die Lösung war, um Ihnen zu ermöglichen, erstellen Sie eine separate Datei mit Ihrem eigenen code, so dass der Formular-designer umschreiben könnte seinen eigenen code ohne Unordnung mit Ihnen. Der PHP-code verwenden, könnte auch hier die gleiche, manchmal ist es eine große Bequemlichkeit zu split a-Klasse-Datei in ein Vielfaches.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sie nicht existieren.
Wenn, jedoch, Sie sind zu versuchen, einen code-generator für die user-land-code angebracht werden könnte (nach den selben use-case wie in C#) dann sind die folgenden kann eine sinnvolle option sein:
Bestimmten Implementierung wie der obige, könnte Sie dann:
Und der resultierende code Aussehen kann:
Was ist wichtig zu beachten, dass über
Generator::shouldGenerateTraitFor
ist, dass, wenn es gibtfalse
, das Merkmal wird nicht werden regeneriert. Dies könnte davon abhängig gemacht, obGeneratedTrait.php
vorhanden ist, und ist notwendig, um sicherzustellen, dass, wenn das Klasse ist, regeneriert der hand-SCHRIFTLICHEN-trait-code nicht verändern.Jedoch, könnte es† werden viel zu Ihrem Vorteil zu betrachten Objekt-Zusammensetzung über diesen Ansatz.
† Es gibt Zeiten, wenn ich fühle, dass der generierte code Ansatz kann sauberer sein, wie mit "entity" - Typen, aber das ist von Fall zu Fall.
PHP verwendet Merkmale: die
http://php.net/manual/en/language.oop5.traits.php
Ermöglichen Sie Ihnen gehören der Klasse die Teile, die aus einem isolierten Teil der Datei (eine Eigenschaft) zu anderen Klassen, dass die Aktien seiner Logik und vielleicht auch andere gemeinsame Logiken (wie multiple Vererbung)