Weil es Spaß und Sinn macht: Eine abstrakte Klasse für XML-Elemente.
Der Vorteil einer abstrakten Klasse: Methoden, die sich nicht ändern, müssen nicht bei jeder abgeleiteten Klasse wiederholt im Code erscheinen. Es könnten auch Traits verwendet werden, jedoch sind sie nicht für den Fall gedacht, dass die Methoden zur gleichen Klassenhierarchie gehören.
ALeo_Sitemap_Xml
/*
Hier werden bereits alle Methoden implementiert,
die alle Klasssen vom Typ 'ILeo_Sitemap_Xml'
gemeinsam haben.
Author: Hermann J. Leopold
Email: hermann.leopold@leopoldnet.de
Date: 2017-02-08
/*
require_once('ILeo_Sitemap_Xml.php');
abstract class ALeo_Sitemap_Xml implements ILeo_Sitemap_Xml
{
/* Hier muss bei den konkreten Klassen
der Name aka Symbol zurück
gegeben werden. /*
protected abstract function getSymbol();
/* Hier wird der Inhalt des Elements
zurück gegeben. Da dies entweder
Text oder andere Elemente sein
können, muss auch diese Methode von
jedem Element überschrieben werden.
/*
protected abstract function getContent();
/* Mit den Attributen des Elements könnte
man viel Spaß haben; eigene Klassen,
schön mit addAttribute eine Liste
hinzufügen...
Da aber nur ein Element überhaupt
Attribute hat, die dazu noch stets
gleich sind, habe ich diese
einfache Methode bevorzugt. /*
protected function getAttributes()
{
// Gibt es Attribute, muss
// diese Methode überschrieben
// werden
return '';
}
/* Hier die wichtige konkrete
Klasse -> das Element wird erstellt /*
public function toString()
{
// Die vielen Zeilen haben einen Grund:
// Es sieht so besser im Blog aus.. 😄
$sReturn = ILeo_Sitemap_Xml::csTagAuf . $this->getSymbol();
$sReturn .= $this->getAttributes() . ILeo_Sitemap_Xml::csTagZu;
$sReturn .= $this->getContent();
$sReturn .= ILeo_Sitemap_Xml::csTagAuf;
$sReturn .= '/' . $this->getSymbol();
$sReturn .= ILeo_Sitemap_Xml::csTagZu;
return $sReturn;
}
}
ALeo_Sitemap_Xml.php
Dank der getContent()-"Problematik" kann ich noch zwei abstrakte Klassen schreiben. Hurra – und ich sollte mal ein Klassendiagramm erstellen. Es könnte sich lohnen 😃