OOP, ist rekursive Klassendefinition möglich?
Tom
- php
Hello,
bisher habe ich mangels PHP 5.x auf den Produktivservern die OOP ziemlich links liegenlassen (außer hier aufmerksam mitzulesen).
Aber ich erinnere mich nicht daran, schon was über rekursive Klassendefinition gelesen zu haben.
Geht das in PHP?
Was muss beachtet werden?
Wie muss man es machen, falls es geht?
als Beispiel:
Die Klasse form könte bestehen aus
form
Im Prinzip müssen die Möglichkeiten von HTML nachgebildet (und ergänzt) werden.
Gibts dazu schon irgendwelche Abhandlungen?
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Sup!
Rekursive Klassendefinition? Häh?
Gruesse,
Bio
In PHP 4.x kann man schon mit OOP arbeiten, allerdings nicht so ausgefeilt, wie in PHP 5.x.
Eine Klasse wird so definiert:
class KlassenName
{
var Eigenschaft1
var Eigenschaft2
// ...
function Methode1()
{
// ...
}
// ...
}
Es gibt auch einen Konstruktor (nicht aber einen Destruktor). Der Konstruktor ist in PHP 4.x eine Methode, die den gleichen Namen hat, wie die Klasse.
Des weiteren gibt es kein public, private und protected.
Die OOP aus PHP 4.x ist auch zu PHP 5.x kompatibel (aber nicht umgekehrt).
Ach so, tschuldigung! Ich habe da noch die Semikola hinter den Eigenschaften vergessen.
Ach, und noch was... Eigenschaften können gleich bei der Definition mit Werten belegt werden. Also:
class Klasse
{
var Eigenschaft = 5;
}
Ähh, Moment. Heute ist echt nicht mein Tag.
Eigenschaften müssen natürlich so lauten:
class Klasse
{
var $Eigenschaft;
var $NochNeEigenschaft = 5;
var $UndNochEine = array();
}
Dumm, dass man seine Posts nicht editieren kann. Jetzt ist aber alles richtig.
Wozu benötigst du eine Klasse, die sich selbst aufruft? Keine Ahnung ob das möglich ist und vielleicht verstehe ich dich auch falsch. Aber falls du Methoden sich selbst aufrufen lassen möchtest, dann ist das etwa per:
class myClass
{
function test($var) {
if (true) {
// Irgendwas
}else {
$this->test($var);
}
}
}
möglich
echo $begrüßung;
als Beispiel:
Die Klasse form könte bestehen ausform
- control
- button
- input <---+
-- text |
-- memo |
-- num |
-- grid |
--- control |
--- button |
--- input <---+
Wenn du mal spezifizieren könntest, was diese Bezeichner sein sollen, könnte ich mir vielleicht vorstellen, was du vorhast. Sind das Klassen, Vererbungen oder nur Eigenschaften der Klasse form?
echo "$verabschiedung $name";
Hello,
echo $begrüßung;
als Beispiel:
Die Klasse form könte bestehen ausform
- control
- button
- input <---+
-- text |
-- memo |
-- num |
-- grid |
--- control |
--- button |
--- input <---+Wenn du mal spezifizieren könntest, was diese Bezeichner sein sollen, könnte ich mir vielleicht vorstellen, was du vorhast. Sind das Klassen, Vererbungen oder nur Eigenschaften der Klasse form?
Das sind alles Klassen.
Ich muss nochmal neu sortieren, denn wie Du schon richtig bemerkt hast, habe ich 'was durcheinander gebracht. Ich komme nochmal wieder ;-)
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hello,
Wenn du mal spezifizieren könntest, was diese Bezeichner sein sollen, könnte ich mir vielleicht vorstellen, was du vorhast. Sind das Klassen, Vererbungen oder nur Eigenschaften der Klasse form?
Ich weiß leider nicht, wie man das auf Denglisch nennt, aber ich würde vermuten "Collection".
Es handelt sich um eine Hierarchie von Instanzen unterscheidlicher Klassen...
Beispiel:
man bildet eine neue Instanz der Klasse [form]
Dieser Instanz werden dann dynamsisch neue Elemente zugewiesen.
Eines der Elemente ist eine Instanz der Klasse [grid]
dieser wiederum können nun neue Elemente zugewiesen werden.
Eines dieser Elemetne könnte wieder vom Typ [grid] sein.
Da die Elemente einer Klasse deren Eigenschaften und Fähigkeiten (Insbesondere die der Kommunikation) erben müssen, muss auch [grid][2] die Fähigkeiten von [grid][1] erben.
Der Stammtyp ist aber immer nur [grid].
Ich hoffe, dass ich meine Gedanken nun vermitteln konnte.
Vielleicht kannst Du meinen Knoten durchschlagen?
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
echo $begrüßung;
Wenn du mal spezifizieren könntest, was diese Bezeichner sein sollen, könnte ich mir vielleicht vorstellen, was du vorhast. Sind das Klassen, Vererbungen oder nur Eigenschaften der Klasse form?
Ich weiß leider nicht, wie man das auf Denglisch nennt, aber ich würde vermuten "Collection".
Es handelt sich um eine Hierarchie von Instanzen unterscheidlicher Klassen...
Ich glaube nicht, das du sowas willst. Ich denke eher, dass du eine (oder mehrere) (abstrakte) Basisklasse(n) deklarieren möchtest, und diese dann zu konkreten Klassen ausbilden möchtest. Die Basisklasse soll einen Container[*] bekommen, der zur Laufzeit die dieser Instanz zugeordneten Instanzen aufnimmt. Die Hinzufüge-Methode kann ja in den abgeleiteten Klassen verfeinert werden, so dass beispielsweise eine Form-Instanz keine weiteren Form-Instanzen aufnehmen kann.
[*] Für PHP nehme ich da einfach ein Array. Eine Collection-Klasse zu erfinden erachte ich nicht als unbedingt notwendig.
Und dann gibt es neben der PHP5-OOP-Magie noch die Möglichkeiten der SPL, die weitere interessante Zugriffsmöglichkeiten bietet, wie z.B. Iterieren über eine Objektinstanz (foreach), wobei dann aber individuell festgelegte Elemente zurückgegeben werden können, z.B. Elemente im Container statt Eigenschaften des Objekts.
Da die Elemente einer Klasse deren Eigenschaften und Fähigkeiten (Insbesondere die der Kommunikation) erben müssen, muss auch [grid][2] die Fähigkeiten von [grid][1] erben.
Die Fähigkeiten sind doch schon in der Klassendeklaration festgelegt. Notfalls kennt die übergeordnete Instanz, wie es mit seinen untergeordneten Instanzen im Container umgehen muss. Die Schäfchen brauchen keine Ausbildung zum Schäfer, wenn selbiger mit seiner Herde die Weide wechseln will.
echo "$verabschiedung $name";
Abend,
Ich weiß leider nicht, wie man das auf Denglisch nennt,
aber ich würde vermuten "Collection".
Collection.. Denglisch.. aha.
Stichwort:
abstrakte Klasse.
Beispiel:
Du erstellst eine abstrakte Klasse "AbstrFrmElement" von
der sich jede weitere, ein HTML-Element repraesentierende,
Klasse ableitet. Gemeinsame Attribute, wie zb die Id oder
der Name, werden dort definiert. Somit erbt jede implementierende
Klasse die Eigenschaften der Basisklasse. Von diesem Punkt
an kann man bedenkenslos weiter abstrahieren - zB "AbstrFrmTextarea"
welches sich von "AbstrFrmTextbox" ableitet, jedoch um die Angabe
der Anzahl der Reihen ergaenzt wurde.
Nach und nach baut man sich auf diese Weise ein recht umfangreiches
Framework auf. Kommt halt darauf an wie sehr man in die Tiefe
gehen moechte (zB Eventhandler fuer bestimmte Elemente,
Abhaengigkeiten zu anderen Elementen, Data Binding etc..)
Liebe Gruesse
Hahaha
Hello,
Du machst Dich ;-)
Abhaengigkeiten zu anderen Elementen, Data Binding etc..)
Das ist das Stichwort: Datenbindung
Dazu gehört aber noch eins: Validierung
und noch eins: typische und gesonderte Formatierung (rechtsbündig, linksbündig, Zahl, Text, Datum...)
Das ganze Modell ist nämlich auf dem Papier schon so möchtig geworden, dass ich mittels Durchstreichen und Weglassen erstmal wieder auf den Teppich kommen muss.
Das bedeutet, dass das System jetzt so geplant werden muss, dass man die Feinheiten später nach und nach noch einbauen kann, _ohne_ an allen Klassen nachbessern zu müssen.
Harzliche Grüße vom Berg
http://www.annerschbarrich.de
Tom
Hallo,
Du machst Dich ;-)
Temporaere Verstimmung. Liegt aber auch an dem interessanten Thema.
Habe das Gleiche vor gut einem Jahr durchgemacht, allerdings privat.
Und wenn man keine Pflichtenhefte vorliegen hat findet man natuerlich
nie ein Ende. Da man m.M.n. dabei schnell an die Grenzen von OOP-PHP
gelangt habe ich das Ganze mitterweile verworfen (schade um die ganze
Arbeit) und schließlich damit angefangen das ganze nach Java zu
mirgrieren. Dabei ist es dann auch geblieben. ;(
Ein Blick auf .NET und man merkt, dass sich hierbei um Jahre handelt.
Das bedeutet, dass das System jetzt so geplant werden muss, dass
man die Feinheiten später nach und nach noch einbauen kann, _ohne_
an allen Klassen nachbessern zu müssen.
Genau so sollte man vorgehen. Eventhandler als solche braucht man ja
erst dann implementieren, wenn sie tatsaechlich benoetigt werden.
Das selbe gilt fuer DataBinding.
Unabhaengig von den oben erwaehnten Erweiterungen, sollte eine Art
ViewState bereits von Anfang an dazugehoeren. Ein State, welcher
die Werte eines Formulares behaelt (Session, Serialisierung etc..),
so dass ein Forumlar sich durch das Fraemwork auch wieder voll-
automatisch befuellen laesst.
Gruesse
Hahaha
Hallo,
»»rekursive Klassendefinition
Lieber Tom, was willst Du denn nun schon wieder?
Beschaeftige dich mit den Grundlagen von OOP. Dann kannst
Du sicherlich auch deine Frage formulieren.
Liebe Gruesse
Hahaha