Ein neues Plugin: Eine abstrakte Klasse für XML-Elemente

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

  1. <?php
  2. /*
  3. Hier werden bereits alle Methoden implementiert,
  4. die alle Klasssen vom Typ 'ILeo_Sitemap_Xml'
  5. gemeinsam haben.
  6. Author: Hermann J. Leopold
  7. Email: hermann.leopold@leopoldnet.de
  8. Date: 2017-02-08
  9. /*
  10. require_once('ILeo_Sitemap_Xml.php');
  11. abstract class ALeo_Sitemap_Xml implements ILeo_Sitemap_Xml
  12. {
  13. /* Hier muss bei den konkreten Klassen
  14. der Name aka Symbol zurück
  15. gegeben werden. /*
  16. protected abstract function getSymbol();
  17. /* Hier wird der Inhalt des Elements
  18. zurück gegeben. Da dies entweder
  19. Text oder andere Elemente sein
  20. können, muss auch diese Methode von
  21. jedem Element überschrieben werden.
  22. /*
  23. protected abstract function getContent();
  24. /* Mit den Attributen des Elements könnte
  25. man viel Spaß haben; eigene Klassen,
  26. schön mit addAttribute eine Liste
  27. hinzufügen...
  28. Da aber nur ein Element überhaupt
  29. Attribute hat, die dazu noch stets
  30. gleich sind, habe ich diese
  31. einfache Methode bevorzugt. /*
  32. protected function getAttributes()
  33. {
  34. // Gibt es Attribute, muss
  35. // diese Methode überschrieben
  36. // werden
  37. return '';
  38. }
  39. /* Hier die wichtige konkrete
  40. Klasse -> das Element wird erstellt /*
  41. public function toString()
  42. {
  43. // Die vielen Zeilen haben einen Grund:
  44. // Es sieht so besser im Blog aus.. 😄
  45. $sReturn = ILeo_Sitemap_Xml::csTagAuf . $this->getSymbol();
  46. $sReturn .= $this->getAttributes() . ILeo_Sitemap_Xml::csTagZu;
  47. $sReturn .= $this->getContent();
  48. $sReturn .= ILeo_Sitemap_Xml::csTagAuf;
  49. $sReturn .= '/' . $this->getSymbol();
  50. $sReturn .= ILeo_Sitemap_Xml::csTagZu;
  51. return $sReturn;
  52. }
  53. }

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 😃