OOP Objektorientierte Programmierung in PHP - Part 4

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • In diesem Tutorial möchte ich die OOP in PHP vorstellen. Ich gehe von PHP Grundkenntnissen und der Kentniss darüber, wie man Funtionen schreibt, aus, alles andere wird erklärt! Im vierten Part werde ich die Vererbung erklären.
    Hallo liebe Community!

    Dies ist mein erstes Tutorial also seit nicht zu streng mit der Kritik, über Verbesserungsvorschläge würde ich mich dennoch freuen!

    Ich setze voraus, dass man weiß wie Funktionen geschrieben werden und dass man mit Variablen umgehen kann. Außerdem sollte man folgende Parts meines Tutorials gelesen haben:
    • [wiki]OOP Objektorientierte Programmierung in PHP - Part 1[/wiki]
    • [wiki]OOP Objektorientierte Programmierung in PHP - Part 2[/wiki]
    • [wiki]OOP Objektorientierte Programmierung in PHP - Part 3[/wiki]

    Ich werde weiterhin mit unseren Tollen Raumschiffen spielen xD

    Jetzt kommen wir zu einem wichtigen Thema der OOP, der Vererbung. In Part 1 habe ich schon etwas angedeutet, aber hier erstmal unser Raumschiffbeispiel:
    Alle Raumschiffe können fliegen, angreifen und haben Leben sowie eine Panzerung. Jäger können schnell fliegen, Zerstörer langsam, Transporter mit Mittelmäßiger Geschwindigkeit. Zerstörer haben eine starke Attacke, Jäger eine Mittelmäßige, Transporter eine Schwache. Transporter können viel Transportieren, Zerstörer ein wenig und Jäger gerade mal den nötigen Treibstoff...
    Alle Raumschiffe haben also einiges gemeinsam, nur mit anderen Werten.
    Damit nicht zuviel neues auf einmal kommt, werden alle Methoden und Eigenschaften ersteinmal public sein. Dazu im nächsten Part mehr.
    Jetzt erstmal den Code und dann erkläre ich die Vererbung dazu.

    Quellcode

    1. <?php
    2. class Raumschiff
    3. {
    4. public $leben;
    5. public $panzer;
    6. public $ladung;
    7. public function __construct()
    8. {
    9. $this->leben = 100;
    10. $this->panzer = 100;
    11. $this->ladung = array();
    12. }
    13. public function fliegen()
    14. {
    15. echo "Captain, wir fliegen mit ".self::GESCHWINDIKEIT." Lichtjahren/Sekunde durchs All";
    16. }
    17. public function attacke()
    18. {
    19. echo "Captain, wir greifen mit ".self::ANGRIFFSWERT." Schuss/Sekunde an";
    20. }
    21. public function einladen($ware)
    22. {
    23. $bereitsGeladen = 0; //speichert was schon eingeladen wurde
    24. foreach($this->ladung as $geladen) //Schleife die alle ladungen durchläuft
    25. {
    26. $bereitsGeladen += $geladen->getPlatz(); //die "aktuelle" ware prüfen, wieviel platz sie braucht
    27. }
    28. if(($ware->getPlatz()+$bereitsGeladen)<=self::LADERAUM_KAPAZITAET) //passt die neue ladung noch rein?
    29. {
    30. $this->ladung[$ware->name] = $ware; //wenn ja, einladen
    31. } else
    32. {
    33. echo "Nicht genug Platz!"; //sonst fehler erzeugen
    34. }
    35. }
    36. public function ausladen($warenname)
    37. {
    38. $ware = $this->ladung[$warenname]; //ware zwischenspeichern
    39. unset($this->ladung[$warenname]); //ware ausladen
    40. return $ware; //zwischenspiecher zurückgeben
    41. }
    42. public function minorLeben($diff) //Leben verkleinern
    43. {
    44. if(is_numeric($diff)) //Das Leben muss um eine Zahl verkleinert werden
    45. {
    46. if($diff<0) //Wenn die Zahl kleiner als 0 ist...
    47. {
    48. $this->leben += $diff; //...wird eine negative Zahl zum leben hinzugefügt...
    49. } else //..sonst...
    50. {
    51. $this->leben -= $diff; //...wird die positive zahl abgezogen!
    52. }
    53. }
    54. }
    55. public function reparieren($diff) //Leben erhöhen
    56. {
    57. if(is_numeric($diff)) //Das Leben muss um eine Zahl verkleinert werden
    58. {
    59. if($diff>0) //Wenn die Zahl größer als 0 ist...
    60. {
    61. $this->leben += $diff; //...wird eine positive Zahl zum leben hinzugefügt...
    62. } else //..sonst...
    63. {
    64. $this->leben -= $diff; //...wird die negative zahl abgezogen! (minus und minus macht plus)
    65. }
    66. }
    67. }
    68. public function getLeben()
    69. {
    70. return $this->leben;
    71. }
    72. public function getPanzerung()
    73. {
    74. return $this->panzer;
    75. }
    76. }
    77. ?>
    Alles anzeigen

    Das ist die Klasse für das, was ALLE Raumschiffe können müssen. Alle properties und methods sollen jetzt die einzelnen Raumschiffklassen "erben".
    Wie das beim erben ist, gibt es Eltern (parent) Klassen von denen geerbt wird und Kinder (child) Klassen die Erben). Ein child kann natürlich auch noch zum parent werden.
    Ein child "erbt" alle Methoden und Eigenschaften vom parent. Was heißt das "erben" nun genau? Nunja, alle properties und methods werden auf das Kind übertragen, auch wenn in der Kindklasse keine als Beispiel function reparieren existiert wird sie vom parent übernommen. Möchte man nun aber eine andere function reparieren (weil es ein Raumschiff ist, das andere Schiffe reparieren kann mit der Funktion) so schreibt man für die Kindklasse eine function reparieren. Diese überschreibt die geerbte Funktion. Um auf die geerbte Funktion dennoch zurückzugreifen gibt es das Keyword "parent". So, genug der Worte, schauen wir uns mal eine Kindklasse an:

    Quellcode

    1. <?php
    2. class Jaeger extends Raumschiff //Die Klasse Jäger "erbt" von der Klasse Raumschiff
    3. {
    4. const GESCHWINDIKEIT = 50;
    5. const ANGRIFFSWERT = 50;
    6. const LADERAUM_KAPAZITAET = 10;
    7. public function __construct()
    8. {
    9. parent::__construct(); //Standardwerte über den geerbten Konstruktor laden
    10. $this->panzer = 25; //Standard Panzerung ist nicht für den Jäger gültig...
    11. }
    12. }
    13. ?>
    Alles anzeigen

    Dieser Jäger kann nun fliegen, angreifen transportieren, alles was Raumschiffe halt können. Wichtig zu erwähnen ist noch, dass wenn es eine Reihe von vererbungen gibt, immer die "nächst höhere" Klasse durch parent "referenziert" wird.

    In diesem Tutorial-Part gab es viele neue Informationen eng gepackt... Ihr solltet auch jeden Fall die Funktionen die unsere Klasse Jaeger hat ausprobieren! Außerdem empfehle ich das ihr noch die Klassse zu Zerstörer und Transporter schreibt! Wenn ihr Probleme (beim Verständniss des Tutorials oder beim coden) habt, schreibt mir eine PN dann kann ich das im Tutorial vllt. noch vertiefen!

    Im nächsten Part geht es um die Visibility: [wiki]OOP Objektorientierte Programmierung in PHP - Part 5[/wiki]
    n0x-f0x

    6.934 mal gelesen