Hallo an alle.
Melde mich nach laanger Zeit wieder.
Ok, ich bin jetzt nach etwa 2 Wochen immer wieder Herumsuchen noch immer nicht klüger als zu Beginn.
Sogar andersrum: ich werde immer verwirrter.
Ich hab mir Dinge durchgelesen wie PHP Namespaces, Visitor Pattern, Decorator Pattern, Magic Methoden (zB: __get, __set), overloading, call_user_function , elendiglich viele Beiträge über das Erstellen eines Pluginsystems, auch hier im Forum.
Aber irgendwie blicke ich je mehr ich lese und probiere - immer weniger durch.
Das was ich machen möchte, ist eigentlich gar nicht so abwegig.
Ich möchte Dritten die Möglichkeit geben, ohne dass sie die Klasse verändern müssten, etwas einzubringen.
Als Beispiel nehme ich ganz simpel: eine Klasse, die eine Zahl nach und nach manipuliert.
Ich werde versuchen, es so einfach wie nur irgendwie möglich darzustellen.
in einer anderen Datei möchte ich nun den Preis abfragen.
Ganz klassisch würde ich nun die Aufrufe abarbeiten:
das wäre der "normale" Weg, ohne etwas dynamisch da hineinzubekommen, alles hardgecoded
aber was wäre, wenn jemand anderer hier in diese Klasse dynamisch eine Funktion, sagen wir: die Funktion rabatt, oder auch: alle Funktionen hier reinintegrieren möchte.
sodass der Aufruf in der anderen Datei immer gleich bleiben kann:
wie stelle ich sowas an?
ich hab mir noch was komplett anderes überlegt, alles in separaten Klassen zu machen und sie alle zu extenden:
Versteht ihr mein Dilemma?
Ist doch wieder eine Sackgasse.
Entweder müsste sich der andere an den Klassen zu schaffen machen.
Oder er müsste dann überall den Aufruf abändern.
Hab mir noch etwas überlegt:
Damit der Aufruf dann trotzdem immer der gleiche bleibt, fange ich hintenrum an:
Boa, ich wär für Hilfe sowas von dankbar, das könnte meine Odyssee vielleicht beenden.
Ich weiss echt nicht mehr, in welche Richtung ich denken soll.
Wie realisiert man sowas?
Danke schon im Voraus für Hilfe.
Melde mich nach laanger Zeit wieder.
Ok, ich bin jetzt nach etwa 2 Wochen immer wieder Herumsuchen noch immer nicht klüger als zu Beginn.
Sogar andersrum: ich werde immer verwirrter.
Ich hab mir Dinge durchgelesen wie PHP Namespaces, Visitor Pattern, Decorator Pattern, Magic Methoden (zB: __get, __set), overloading, call_user_function , elendiglich viele Beiträge über das Erstellen eines Pluginsystems, auch hier im Forum.
Aber irgendwie blicke ich je mehr ich lese und probiere - immer weniger durch.
Das was ich machen möchte, ist eigentlich gar nicht so abwegig.
Ich möchte Dritten die Möglichkeit geben, ohne dass sie die Klasse verändern müssten, etwas einzubringen.
Als Beispiel nehme ich ganz simpel: eine Klasse, die eine Zahl nach und nach manipuliert.
Ich werde versuchen, es so einfach wie nur irgendwie möglich darzustellen.
PHP-Code:
class Produktpreis {
function Produktpreis($produktID) {
// Abfrage in der Datenbank nach dem netto-Preis - der Einfachheit halber lass ich die ganzen Abfragen weg
// heraus kommt eine Zahl
$this->preis = $resultat_aus_db_abfrage;
}
function steuer() {
//Rechne auf den Preis dann Steuer auf
// Abfrage in der Datenbank nach dem Steuersatz
$this->preis = $this->preis * $resultat_aus_db_abfrage;
}
// und so weiter, es würde immer wieder $this->preis manipuliert
// Nun möchte ich aber, dass die nächste Funktion von extern kommt, wie ein Plugin
// die Funktion könnte zB so aussehen:
function rabatt() {
//Reduziere den Preis um irgendeinen Rabatt
// Abfrage in der Datenbank nach dem Rabatt
$this->preis = $this->preis - $resultat_aus_db_abfrage;
}
// und so weiter
}
Ganz klassisch würde ich nun die Aufrufe abarbeiten:
PHP-Code:
include('die_klasse_die_sich_mit_dem_preis_beschaeftigt.php');
$produktID = '64837483';
$produktPreis = new ProduktPreis( $produktID );
$produktPreis->steuer();
$produktPreis->rabatt();
echo $produktPreis->preis;
aber was wäre, wenn jemand anderer hier in diese Klasse dynamisch eine Funktion, sagen wir: die Funktion rabatt, oder auch: alle Funktionen hier reinintegrieren möchte.
sodass der Aufruf in der anderen Datei immer gleich bleiben kann:
PHP-Code:
$produktPreis = new ProduktPreis( $produktID );
// inkludiere nun alle Funktionen von einem bestimmten Ort, zB: /ProduktPreis/*.functions.php
// könnten auch mehrere verschiedene Dateien mit je einer Funktion sein.
// der Preis wird kontinuierlich manipuliert und mit Steuer, Rabatt, Sympathiebonus, Produktnachlass und sonstigem anderem Zeugs versorgt
// und zum Schluss:
echo $produktPreis->preis;
ich hab mir noch was komplett anderes überlegt, alles in separaten Klassen zu machen und sie alle zu extenden:
PHP-Code:
class a extends b
class b extends c
class c extends d
// und so weiter, würde auch zum gleichen Ergebnis führen, allerdings:
// der Aufruf würde sich dann ändern: anstatt dass ich sie aufrufe mit:
$obj = new a;
// müsste ich dann den Aufruf mit:
$obj = new d;
// machen
Ist doch wieder eine Sackgasse.
Entweder müsste sich der andere an den Klassen zu schaffen machen.
Oder er müsste dann überall den Aufruf abändern.
Hab mir noch etwas überlegt:
Damit der Aufruf dann trotzdem immer der gleiche bleibt, fange ich hintenrum an:
PHP-Code:
class a extends b
class b extends c
class c extends finalklasse
// es bliebe der Aufruf dann immer der gleiche:
$obj = new finalklasse;
// aber: derjenige müsste dann auch immer wieder nachkorrigieren, welche Klasse nun wo extendet.
// käme dann etwas dazu, dann müsste er:
class a extends b
class b extends andereklasse
class andereklasse extends finalklasse
// machen, was dann auch wieder verkompliziert und zu keinem brauchbaren Ergebnis führt.
Ich weiss echt nicht mehr, in welche Richtung ich denken soll.
Wie realisiert man sowas?
Danke schon im Voraus für Hilfe.
Kommentar