PHP - Vererbung: Ein Leitfaden für Anfänger

Hallo da draußen, zukünftige PHP-Zauberer! Heute machen wir uns auf eine aufregende Reise in die Welt der PHP-Vererbung. Machen Sie sich keine Sorgen, wenn Sie neu im Programmieren sind – ich werde Ihr freundlicher Guide sein und alles Schritt für Schritt erklären. Also, holen Sie sich eine Tasse Kaffee (oder Tee, wenn das mehr Ihr Ding ist) und tauchen wir ein!

PHP - Inheritance

Was ist Vererbung?

Vererbung ist wie ein Stammbaum für Klassen in PHP. Genau wie Sie die Augen Ihrer Großmutter oder den Humor Ihres Vaters erben könnten, kann eine Klasse in der Programmierung Eigenschaften und Methoden von einer anderen Klasse erben. Dieses Konzept hilft uns, organisierteren und wiederverwendbaren Code zu schreiben.

Stellen Sie es sich so vor: Stellen Sie sich vor, Sie erstellen ein Videospiel mit verschiedenen Charaktertypen. Alle Charaktere könnten einige grundlegende Merkmale teilen (wie einen Namen oder Gesundheitspunkte), aber jeder Charaktertyp (wie Krieger oder Magier) könnte einzigartige Fähigkeiten haben. Vererbung ermöglicht es uns, diese gemeinsamen Merkmale in einer Basisklasse zu definieren und dann spezifische Charakterklassen zu erstellen, die diese Merkmale erben und ihre eigenen einzigartigen Funktionen hinzufügen.

Grundlegendes Vererbungsbeispiel

Lassen Sie uns mit einem einfachen Beispiel beginnen, um zu sehen, wie Vererbung in PHP funktioniert.

class Animal {
public $name;

public function __construct($name) {
$this->name = $name;
}

public function speak() {
echo "Das Tier macht einen Laut.";
}
}

class Dog extends Animal {
public function speak() {
echo $this->name . " bellt: Wuff wuff!";
}
}

$myDog = new Dog("Buddy");
$myDog->speak(); // Ausgabe: Buddy bellt: Wuff wuff!

In diesem Beispiel haben wir zwei Klassen: Animal und Dog. Die Dog-Klasse erweitert die Animal-Klasse, das bedeutet, sie erbt alle Eigenschaften und Methoden von Animal.

Lassen Sie uns das aufschlüsseln:

  1. Wir definieren eine Basisklasse Animal mit einer $name-Eigenschaft und einer speak()-Methode.
  2. Wir erstellen eine Dog-Klasse, die Animal mit dem extends-Keyword erweitert.
  3. Die Dog-Klasse überschreibt die speak()-Methode mit ihrer eigenen Implementierung.
  4. Wir erstellen ein neues Dog-Objekt namens "Buddy" und rufen seine speak()-Methode auf.

Die Dog-Klasse erbt die $name-Eigenschaft von Animal, aber bietet ihre eigene Version der speak()-Methode. Dies wird als Methodenüberschreibung bezeichnet und ist eine leistungsstarke Funktion der Vererbung.

Vererbung und Zugriffsmodifikatoren

Nun sprechen wir darüber, wie Vererbung mit verschiedenen Zugriffsmodifikatoren (public, protected und private) funktioniert.

class Vehicle {
public $brand;
protected $model;
private $serialNumber;

public function __construct($brand, $model, $serialNumber) {
$this->brand = $brand;
$this->model = $model;
$this->serialNumber = $serialNumber;
}

public function getInfo() {
return "Marke: " . $this->brand . ", Modell: " . $this->model;
}

protected function getSerialNumber() {
return $this->serialNumber;
}
}

class Car extends Vehicle {
public $doors;

public function __construct($brand, $model, $serialNumber, $doors) {
parent::__construct($brand, $model, $serialNumber);
$this->doors = $doors;
}

public function getFullInfo() {
return $this->getInfo() . ", Türen: " . $this->doors . ", SN: " . $this->getSerialNumber();
}
}

$myCar = new Car("Toyota", "Corolla", "ABC123", 4);
echo $myCar->getFullInfo();
// Ausgabe: Marke: Toyota, Modell: Corolla, Türen: 4, SN: ABC123

In diesem Beispiel:

  1. Die Vehicle-Klasse hat Eigenschaften mit unterschiedlichen Zugriffsmodifikatoren.
  2. Die Car-Klasse erweitert Vehicle und fügt ihre eigene Eigenschaft ($doors) hinzu.
  3. Die Car-Klasse kann auf public und protected Mitglieder von Vehicle zugreifen, aber nicht auf private Mitglieder.
  4. Wir verwenden parent::__construct() um den Konstruktor der Elternklasse aufzurufen.

Merken Sie sich:

  • Public-Mitglieder sind überall zugreifbar.
  • Protected-Mitglieder sind innerhalb der Klasse und ihrer Unterclasses zugreifbar.
  • Private-Mitglieder sind nur innerhalb der Klasse, in der sie definiert sind, zugreifbar.

Konstruktor in der Vererbung

Lassen Sie uns tiefer in die Funktionsweise von Konstruktoren in der Vererbung eintauchen:

class Shape {
protected $color;

public function __construct($color) {
$this->color = $color;
echo "Shape-Konstruktor aufgerufen.<br>";
}
}

class Circle extends Shape {
private $radius;

public function __construct($color, $radius) {
parent::__construct($color);
$this->radius = $radius;
echo "Circle-Konstruktor aufgerufen.<br>";
}

public function getInfo() {
return "Ein {$this->color} Kreis mit Radius {$this->radius}";
}
}

$myCircle = new Circle("rot", 5);
echo $myCircle->getInfo();

Ausgabe:

Shape-Konstruktor aufgerufen.
Circle-Konstruktor aufgerufen.
Ein roter Kreis mit Radius 5

Hier ist, was passiert:

  1. Wenn wir ein Circle-Objekt erstellen, ruft PHP zuerst den Shape-Konstruktor (die Elternklasse) auf.
  2. Dann ruft es den Circle-Konstruktor auf.
  3. Wir verwenden parent::__construct($color) um sicherzustellen, dass der Shape-Konstruktor aufgerufen wird und die $color-Eigenschaft gesetzt wird.
  4. Schließlich setzen wir die $radius-Eigenschaft spezifisch für die Circle-Klasse.

Dies stellt sicher, dass sowohl die Eltern- als auch die Kindklasse ordnungsgemäß initialisiert werden.

Methodenreferenztabelle

Hier ist eine praktische Tabelle der Methoden, die wir in unseren Beispielen verwendet haben:

Methode Beschreibung
__construct() Konstruktormethode, wird aufgerufen, wenn ein Objekt erstellt wird
speak() Methode, um ein Tier sprechen zu lassen
getInfo() Methode, um grundlegende Informationen über ein Fahrzeug zu erhalten
getSerialNumber() Geschützte Methode, um die Seriennummer eines Fahrzeugs zu erhalten
getFullInfo() Methode, um vollständige Informationen über ein Auto zu erhalten

Schlussfolgerung

Vererbung ist ein leistungsstarkes Werkzeug in PHP, das es uns ermöglicht, Hierarchien von Klassen zu erstellen und Code zu wiederverwenden und zu organisieren. Erinnern Sie sich daran, es ist wie das Bauen mit LEGO-Steinen – Sie beginnen mit einem Basisstück und fügen dann spezifischere Teile darauf hinzu.

Während Sie Ihre PHP-Reise fortsetzen, werden Sie viele weitere aufregende Möglichkeiten der Vererbung entdecken. Üben Sie weiter und bald werden Sie komplexe und effiziente objektorientierte Programme mit Leichtigkeit erstellen können!

Frohes Coden, zukünftige PHP-Meister! ??‍??‍?

Credits: Image by storyset