hi Felix,
Ich finde Deine Methode
Moon::load
in dieser Form ohnehin nicht clever gedacht:
function load($d,$m,$y, PDO $pdo)
Warum erwartest Du den Datumswert in seinen Einzelheiten (Tag, Monat und Jahr - und auch noch in dieser Reihenfolge?!?),
Die Antwort ist ganz einfach und steht auch so in meinem Artikel: Weil die Klasse Moon
von der Klasse Scaliger
erbt und der Konstruktor dieser Elternklasse das Datum als Tag, Monat und Jahr als Einzelwerte erwartet.
anstatt als Datumswert (egal, ob ein DateTime-Objekt, UNIX-Timestamp oder
Y-m-d
-String)?
Mein Artikel zeigt die Anwendung der Methode fetchObject():
fetchObject('Moon', array($d,$m,$y));
# ^ Argumente für den Konstruktor
# ^ Name der Klasse desen Instanz zu erstellen ist
Wir haben also 2 Dinge zu beachten, einmal die Argumentenliste des Konstruktors und zum Anderen die Parameter eines SQL-Statements innerhalb der Klassenerweiterung. Nach außen hin jedoch ist diese Klassenerweiterung transparent und bekommt somit Tag, Monat, Jahr als Einzelwerte übergeben.
Meine API orientiert sich also an der Elternklasse. In Perl übrigens auch:
my $moon = Moon->new( date => '9.2.2020' ) or die $@;
# gemäß Elternklasse
MFG