Persistenzgenerator
Christopher
- php
0 dedlfix0 Christopher0 Blaubart
Guten Abend die Herrschaften,
ich habe gerade damit angefangen, mir einen Persistenz-Generator(*)
unter PHP zu schreiben - bzw. meinen urspruenglich unter Java
geschriebenen Generator nach PHP zu mirgrieren. Die Migration
nach .NET kann ich bereits als "erfolgreich" titulieren ;-)
Und nun stolper ich ueber etliche OOP-Maengel seitens PHP, welche
die Aufgabe - zumindest noch derzeit - schirr unmoeglich erscheinen
leasst.
PHP ist wirklich eine Qual fuer objektorientierte Programmierer!
Allgemeine Sachen wie Vererbung, Polymorphie, Typsicherheit,
Klassenhirarchien und -Abstraktion erweisen sich als absolut
grov varlaessig oder bis hin zu teilweise gar unmoeglich.
Jedes Mal stosse ich unter php.net auf Userbeitraege, die mir
erzaehlen wollen, dass ich ein ENUM doch tatsaechlich mit einer
finalen Klasse und Konstanten zu realisieren habe.
Hilfe! Das kann es doch wohl echt nicht sein!
Mir graust's!
Was fuer Loesungen gibt es nun? Soll ich darauf warten, dass PHP6
bald erscheint und dieses _hoffentlich_ (zB) Enums kennt - oder
zumindest nicht gleich wegrennt wenn es um Typsicherheit geht?
Oder sollte ich die Migration sogar komplett lassen?
..ich bin frustriert!
Gruesse
Christopher
(*) Er baut mir anhand einer vorhandenen Datenbank die daraus
resultierenden Persistenzobjekte (POs) und die sich davon
abstrahierenden Persistenzadapter (PAs). Dieses geschieht zum
einen anhand der Tabellen/Spalten-Eigenschaften (auto_increment,
FKs, PKs, so fern INNO_DB auch referentielle Integritaet), als
auch ueber ein manuell erweiterbares Konfigurationsfile. Die
jeweiligen Spalten-Typen werden zu Datentypen gemappt, deren
Setter-Methoden darauf achten, ob auch die korrekten, d.h.
erlaubte Werte gesetzt werden (Typ, length, nullable, etc..).
Aehnlich wie Hibernate kann man sich das ganze in
etwa vorstellen.
Es gibt einheitliche Methoden fuer Retrieve, Insert, Update und
Delete. UserPO.Update() reicht zum Beispiel aus, um ein
User-Objekt zu persistieren bzw. upzudaten. Oder man kann zB
mittels User.Retrieve(Condition condition) eine Liste von
Benutzern aus der Datenbank lesen.
PS: Waehrend des schreibens bin ich tatsaechlich noch stinkiger
auf PHP geworden.. grr. Ich glaube ich lasse dass mit dem Mirgrieren
und werde einfach meinen Java-Generator um PHP-Templates erweitern.
Dann laeuft das ganze zwar nur mit der Voraussetzung, dass man
Java installiert hat, jedoch sollte das wohl eine mindere Huerde
darstellen.
echo $begrüßung;
Und nun stolper ich ueber etliche OOP-Maengel seitens PHP, welche
die Aufgabe - zumindest noch derzeit - schirr unmoeglich erscheinen
leasst.
Ja, die Mängel sind vorhanden, aber was soll's? PHP ist nun mal nicht als OOP-Sprache erfunden worden. Setze PHP gemäß seiner Philosophie ein oder lass es bleiben, wenn es für dein Vorhaben nicht geeignet ist.
PHP ist wirklich eine Qual fuer objektorientierte Programmierer!
Allgemeine Sachen wie Vererbung, Polymorphie, Typsicherheit,
Klassenhirarchien und -Abstraktion erweisen sich als absolut
grov varlaessig oder bis hin zu teilweise gar unmoeglich.
Trenne dich von dem Gedanken, dass in Sprache X die gleichen Features wie in Sprache Y vorhanden sein müssen.
Übrigens: "varlässig", gutes Wortspiel, ja, PHP geht lässig mit Var(iablen) um. :-)
(Genauer gesagt mit den Typen der Variablen und der automatischen Typumwandlung.)
Jedes Mal stosse ich unter php.net auf Userbeitraege, die mir
erzaehlen wollen, dass ich ein ENUM doch tatsaechlich mit einer
finalen Klasse und Konstanten zu realisieren habe.
Ob eine eigene Klasse notwendig ist oder ob du die Konstanten einfach der sowieso schon vorhandenen Klasse unterschieben kannst ... das musst du selbst entscheiden.
Was fuer Loesungen gibt es nun? Soll ich darauf warten, dass PHP6
bald erscheint und dieses _hoffentlich_ (zB) Enums kennt - oder
zumindest nicht gleich wegrennt wenn es um Typsicherheit geht?
ENUMs wird es auch unter PHP6 nicht geben. Ich wüsste auch nicht, wie das in die derzeitige Typ-Philosophie aufgenommen werden kann. Und PHP wäre nicht mehr PHP, wenn es Typsicherheit bekäme.
Oder sollte ich die Migration sogar komplett lassen?
Bist du sicher, dass deine Erfindung (wasauchimmer) was ganz besonderes ist, und dafür noch nichts existiert?
echo "$verabschiedung $name";
Hi,
echo $begrüßung;
..noch nicht einmal der Parser funktioniert richtig.. SCNR
Ja, die Mängel sind vorhanden, aber was soll's? PHP ist nun
mal nicht als OOP-Sprache erfunden worden. Setze PHP gemäß seiner
Philosophie ein oder lass es bleiben, wenn es für dein Vorhaben
nicht geeignet ist.
Genau beim Abwegen dessen war ich als ich das Posting schrieb.. na,
gut - ehrlich gesagt habe ich mit zu grossem Eifer direkt mit dem
Pgroammieren angefangen..
Trenne dich von dem Gedanken, dass in Sprache X die gleichen Features
wie in Sprache Y vorhanden sein müssen.
Also was OOP anbelangt, so haben zB Java, C++, C# schon recht identische
Grundzuege (zumindest was die Verwendung angeht - natuerlich nicht was
intern ablaeuft)
Übrigens: "varlässig", gutes Wortspiel, ja, PHP geht lässig mit Var(iablen) um. :-)
(Genauer gesagt mit den Typen der Variablen und der automatischen Typumwandlung.)
..dann war es ja doch verstaendlich ;-)
Ob eine eigene Klasse notwendig ist oder ob du die Konstanten einfach der
sowieso schon vorhandenen Klasse unterschieben kannst ... das musst du
selbst entscheiden.
Grmpf!
Bist du sicher, dass deine Erfindung (wasauchimmer) was ganz besonderes ist, und
dafür noch nichts existiert?
Naja, wie gesagt habe ich bereits auf Hibernate verlinkt. Jedoch ist mir das
fuer kleinere Projekte zu "overkilled" (immer diese furchtbaren Anglizismen).
Daher mein Ansatz.
Thx!
Gruesse
Christopher
Tach.
Trenne dich von dem Gedanken, dass in Sprache X die gleichen Features
wie in Sprache Y vorhanden sein müssen.
»»
Also was OOP anbelangt, so haben zB Java, C++, C# schon recht identische
Grundzuege (zumindest was die Verwendung angeht - natuerlich nicht was
intern ablaeuft)
Ja und? Daß du dich hier über die Abwesehenheit von Enums oder die fehlende Typsicherheit in PHP aufregst, ist genauso sinnvoll, wie die Beschwerde über nicht (direkt) verfügbare Mehrfachvererbung, fehlende Pointerarithmetik oder nicht integriertes Operator Overloading in Java. Die Sprachen unterscheiden sich eben; und das nicht zufällig. Wenn du die Eigenschaften aus Sprache X haben möchtest, programmiere in Sprache X, und nicht in Sprache Y, welche u. U. von den Ansätzen her aus einer völlig anderen Richtung kommt!
Ob eine eigene Klasse notwendig ist oder ob du die Konstanten einfach der
sowieso schon vorhandenen Klasse unterschieben kannst ... das musst du
selbst entscheiden.
»»
Grmpf!
War das Problem mit der Enum-Alternative in PHP deine einzige Frage, bei der dir jemand weiterhelfen kann oder wolltest du lediglich deinen Unmut darüber zum Ausdruck bringen, daß PHP != JAVA, PHP != C++ und sogar PHP != C#?
Abend,
Ja und? Daß du dich hier über die Abwesehenheit von Enums oder die fehlende
Typsicherheit in PHP aufregst, ist genauso sinnvoll, wie die Beschwerde über
nicht (direkt) verfügbare Mehrfachvererbung, fehlende Pointerarithmetik oder
nicht integriertes Operator Overloading in Java. Die Sprachen unterscheiden
sich eben; und das nicht zufällig. Wenn du die Eigenschaften aus Sprache X
haben möchtest, programmiere in Sprache X, und nicht in Sprache Y, welche u.
U. von den Ansätzen her aus einer völlig anderen Richtung kommt!
Wie Du vermutlich ueberlesen hast ist es mein Ziel ein bestehendes Programm nach
PHP zu migrieren. Daher die Vergleiche zwischen eben diesen Sprachen.
War das Problem mit der Enum-Alternative in PHP deine einzige Frage, bei der
dir jemand weiterhelfen kann oder wolltest du lediglich deinen Unmut darüber
zum Ausdruck bringen, daß PHP != JAVA, PHP != C++ und sogar PHP != C#?
Ach Blaubart, es ist zu speat um deinen Unmut zu besaenftigen. Du solltest
wohl besser einfach schlafen gehen.
Christopher