hi,
Du schreibst deine Klasse, weil du Speicher sparen willst(?): hast du durch irgendwelche Benchmarks Verbesserungen messen können?
Bisher kein Benchmark. Aus Erfahrung heraus ist das Aufteilen in Subklassen jedoch CPU-freundlich, Beispiel:
$date = new Date_Kirche(array('date' => array(
1,11,2013
)));
$kirchenjahr = $date->kirchenjahr();
ksort($kirchenjahr, SORT_NUMERIC);
foreach($kirchenjahr as $jd => $name){
$d = new Date(array('julianday' => $jd));
echo "$d $name\n";
}
D.h., in der foreach wird das Objekt nicht über die Subklasse erstellt sondern über die 'kleinere' Basisklasse. Btw., ausgegeben werden die Feiertage des Kirchenjahres:
01.01.2013 Di 01/2013 Neujahr
06.01.2013 So 01/2013 Drei Königstag
07.02.2013 Do 06/2013 Weiberfastnacht
11.02.2013 Mo 07/2013 Rosenmontag
29.03.2013 Fr 13/2013 Karfreitag
31.03.2013 So 13/2013 Ostersonntag
01.04.2013 Mo 14/2013 Ostermontag
09.05.2013 Do 19/2013 Christi Himmelfahrt
19.05.2013 So 20/2013 Pfingstsonntag
20.05.2013 Mo 21/2013 Pfingstmontag
30.05.2013 Do 22/2013 Fronleichnam
15.08.2013 Do 33/2013 Maria Himmelfahrt
20.11.2013 Mi 47/2013 Buß- und Bettag
24.11.2013 So 47/2013 Totensonntag
01.12.2013 So 48/2013 Erster Advent
08.12.2013 So 49/2013 Zweiter Advent
15.12.2013 So 50/2013 Dritter Advent
22.12.2013 So 51/2013 Vierter Advent
24.12.2013 Di 52/2013 Heiligabend
25.12.2013 Mi 52/2013 Erster Weihnachtstag
26.12.2013 Do 52/2013 Zweiter Weihnachtstag
Und noch ein Blick hinter die Kulissen um die Arbeitsweise mal zu zeigen ;)
// Array mit Scaligertagen und Namen der Feiertage
public function kirchenjahr(){
$jdo = $this->ostern();
$class = __CLASS__;
$meta = new $class (array('isa' => 'testobject', 'date' => array(15,8,$this->YEAR)));
$ft = array(
$jdo => 'Ostersonntag',
$jdo + 1 => 'Ostermontag',
$jdo -2 => 'Karfreitag',
$jdo + 39 => 'Christi Himmelfahrt',
$jdo + 49 => 'Pfingstsonntag',
$jdo + 50 => 'Pfingstmontag',
$jdo + 60 => 'Fronleichnam',
$jdo - 48 => 'Rosenmontag',
$jdo - 52 => 'Weiberfastnacht',
$meta->JD => 'Maria Himmelfahrt',
);
// 1.1. Neujahr
$jd = $meta->EPOCH == 'G' ? $meta->jd_greg(1,1,$this->YEAR) : $meta->jd_juli(1,1,$this->YEAR);
$ft[$jd] = 'Neujahr';
// 6.1. Drei Könige
$ft[$jd+5] = 'Drei Königstag';
// 24.12. Heiligabend
$jd = $meta->EPOCH == 'G' ? $meta->jd_greg(24,12,$this->YEAR) : $meta->jd_juli(24,12,$this->YEAR);
$ft[$jd] = 'Heiligabend';
$ft[$jd+1] = 'Erster Weihnachtstag';
$ft[$jd+2] = 'Zweiter Weihnachtstag';
// Der erste Advent ist der Sonntag zwischen dem 27.11. und dem 03.12.
// Der erste Advent ist der erste Sonntag nach dem 26.11.
// Der vierte Advend ist der letzte Sonntag vor dem 25.12.
// Ergo, Rechenweg: Bestimme JD für 26.11. und den numerischen Wochentag
$jd2611 = $meta->EPOCH == 'G' ? $meta->jd_greg(26,11,$this->YEAR) : $meta->jd_juli(26,11,$this->YEAR);
$wochentag2611 = (1 + ($jd2611 % 7));
$advent1 = $jd2611 + 7 - $wochentag2611;
// fällt dieser Tag auf den 27.11. oder davor, ist der 1. Advent eine Woche später
if($advent1 <= ($jd2611 + 1)) $advent1 += 7;
$ft[$advent1] = 'Erster Advent';
$ft[$advent1 + 7] = 'Zweiter Advent';
$ft[$advent1 + 14] = 'Dritter Advent';
$ft[$advent1 + 21] = 'Vierter Advent';
$ft[$advent1 - 7] = 'Totensonntag';
$ft[$advent1 - 11] = 'Buß- und Bettag';
return $ft;
}
Schönes Wochenende!