Objektorientierte Programmierung (OOP) in PHP verstehen
OOP in PHP: Klassen, Objekte, Kapselung, Vererbung und Polymorphismus verständlich erklärt mit Beispielen.
Objektorientierte Programmierung (OOP) ist ein Programmierparadigma, das auf dem Konzept von „Objekten" aufbaut, die Daten (Eigenschaften) und Verhalten (Methoden) bündeln, die auf diesen Daten operieren. Anstatt zusammengehörige Variablen und Funktionen über ein Skript zu verteilen, ermöglicht OOP deren Gruppierung in eigenständige Einheiten, die die Dinge modellieren, mit denen Ihre Anwendung arbeitet — ein User, eine Order, ein Product.
Dieses Kapitel behandelt die zwei Grundlagen von OOP in PHP — Klassen und Objekte — und führt dann durch die drei Konzepte, die Sie täglich damit verwenden werden: Kapselung, Vererbung und Polymorphismus. Am Ende werden Sie PHP-Klassen sicher lesen und schreiben können und wissen, welches Feature welches Problem löst.
Was sind Klassen und Objekte in PHP OOP?
Eine Klasse ist ein Bauplan. Sie beschreibt, welche Daten ein Objekt enthält und was es tun kann, ist aber selbst kein konkretes Ding — ähnlich wie ein Architekturplan kein Haus ist. Ein Objekt ist eine konkrete Instanz, die aus diesem Bauplan erstellt wird, mit dem Schlüsselwort new. Sie können viele Objekte aus einer Klasse erstellen, jedes mit eigenen Daten.
| Begriff | Was es ist | Beispiel |
|---|---|---|
| Klasse | Der Bauplan (Definition) | class User { ... } |
| Objekt | Eine lebende Instanz einer Klasse | $alice = new User(...) |
| Eigenschaft | Eine Variable, die zu einem Objekt gehört | $this->email |
| Methode | Eine Funktion, die zu einer Klasse gehört | getEmail() |
Eine nützliche Merkhilfe: Die Klasse ist der Ausstechrahmen, die Objekte sind die Plätzchen. Klassen und Objekte sind die Bausteine von OOP in PHP.
Klassen in PHP definieren
Klassen in PHP werden mit dem Schlüsselwort class definiert, gefolgt vom Namen der Klasse. Die Eigenschaften und Methoden einer Klasse werden innerhalb der Klassendefinition in geschweiften Klammern ({}) definiert. Hier ist ein Beispiel für eine Klassendefinition in PHP:
Beispiel einer Klassendefinition in PHP
class User {
public $username;
public $email;
public function __construct($username, $email) {
$this->username = $username;
$this->email = $email;
}
public function getUsername() {
return $this->username;
}
public function getEmail() {
return $this->email;
}
}In diesem Beispiel hat die Klasse User zwei Eigenschaften, $username und $email, sowie zwei Methoden, getUsername() und getEmail(). Die Methode __construct ist eine spezielle Konstruktor-Methode in PHP: Sie wird automatisch in dem Moment ausgeführt, in dem ein Objekt erstellt wird, was sie zum natürlichen Ort macht, um den Anfangszustand eines Objekts einzurichten. Innerhalb jeder Methode bezieht sich $this auf das aktuelle Objekt, sodass $this->username „die Eigenschaft username dieses Objekts" bedeutet. Um mehr über Konstruktoren und die passende Aufräummethode zu erfahren, lesen Sie PHP Constructor und PHP Destructor.
Objekte aus Klassen erstellen
Um ein Objekt aus einer Klasse zu erstellen, verwenden Sie das Schlüsselwort new, gefolgt vom Namen der Klasse. Hier ist ein Beispiel, wie ein Objekt aus der Klasse User erstellt wird:
PHP erstellt ein Objekt aus einer Klasse mit dem new-Schlüsselwort
$user = new User("John Doe", "[email protected]");Dies erstellt ein neues User-Objekt und speichert es in der Variable $user. Sie können auf die Eigenschaften und Methoden des Objekts mit dem Pfeiloperator (->) zugreifen. Hier ist ein Beispiel, wie auf die Eigenschaften und Methoden des Objekts $user zugegriffen wird:
PHP greift mit dem Pfeiloperator auf Eigenschaften und Methoden des Objekts zu
echo $user->username; // Outputs: "John Doe"
echo $user->email; // Outputs: "[email protected]"
echo $user->getUsername(); // Outputs: "John Doe"
echo $user->getEmail(); // Outputs: "[email protected]"Kapselung: Zugriff auf Daten kontrollieren
In den obigen Beispielen ist jede Eigenschaft als public deklariert, was bedeutet, dass jeder Code sie direkt lesen oder ändern kann ($user->email = "..."). Das ist praktisch, aber riskant — es erlaubt dem Rest Ihres Programms, ein Objekt in einen ungültigen Zustand zu versetzen. Kapselung ist die Praxis, die internen Details eines Objekts zu verbergen und stattdessen eine kontrollierte Schnittstelle bereitzustellen.
PHP bietet drei Sichtbarkeitsmodifikatoren für Eigenschaften und Methoden:
| Modifikator | Zugänglich von | Verwenden Sie es, wenn |
|---|---|---|
public | Überall | Das Member ist Teil der offiziellen Schnittstelle des Objekts. |
protected | Der Klasse und ihren Unterklassen | Unterklassen benötigen es, aber externer Code sollte es nicht. |
private | Nur derselben Klasse | Das Member ist ein internes Detail. |
Indem Sie eine Eigenschaft private machen und Methoden zum Lesen oder Ändern bereitstellen, halten Sie die Validierung an einem Ort:
<?php
class BankAccount
{
private $balance = 0;
public function deposit($amount)
{
if ($amount <= 0) {
throw new InvalidArgumentException("Deposit must be positive.");
}
$this->balance += $amount;
}
public function getBalance()
{
return $this->balance;
}
}
$account = new BankAccount();
$account->deposit(100);
$account->deposit(50);
echo $account->getBalance(); // Outputs: 150Da $balance private ist, kann kein externer Code sie direkt auf eine negative Zahl setzen — jede Änderung muss durch deposit() erfolgen, wo die Regel festgelegt ist. Für einen tieferen Einblick in die drei Schlüsselwörter lesen Sie PHP Access Modifiers.
Vererbung in PHP OOP
Vererbung ist ein OOP-Feature, das Klassen erlaubt, Eigenschaften und Methoden von übergeordneten Klassen zu erben. Damit können Entwickler neue Klassen erstellen, die auf bestehenden Klassen basieren, ohne den gesamten Code neu schreiben zu müssen. In PHP wird Vererbung mit dem Schlüsselwort extends definiert. Hier ist ein Beispiel für Vererbung in PHP:
PHP-Beispiel für Vererbung als OOP-Feature, das Klassen erlaubt
class Admin extends User {
public $permissions;
public function __construct($username, $email, $permissions) {
parent::__construct($username, $email);
$this->permissions = $permissions;
}
public function getPermissions() {
return $this->permissions;
}
}In diesem Beispiel erweitert die Klasse Admin die Klasse User und erbt deren Eigenschaften und Methoden. Die Klasse Admin hat auch eine eigene Eigenschaft, $permissions, und eine Methode, getPermissions(). Das Schlüsselwort parent:: wird verwendet, um die Methode __construct der übergeordneten Klasse aufzurufen, sodass die Klasse Admin die Logik der Klasse User wiederverwenden kann, anstatt sie zu duplizieren. Eine Klasse kann in PHP nur eine übergeordnete Klasse erweitern. Für das vollständige Bild lesen Sie PHP Inheritance.
Polymorphismus in PHP OOP
Polymorphismus ist ein OOP-Feature, das es erlaubt, Objekte verschiedener Klassen als Objekte derselben Klasse zu behandeln. Damit können Entwickler generischen Code schreiben, der mit Objekten verschiedener Klassen funktioniert, solange diese dieselben Methoden besitzen. In PHP wird Polymorphismus erreicht, indem gemeinsame Methoden in übergeordneten Klassen definiert und in Kindklassen implementiert werden. Hier ist ein Beispiel für Polymorphismus in PHP:
Beispiel für Polymorphismus in PHP
<?php
class User
{
public $username;
public $email;
public function __construct($username, $email)
{
$this->username = $username;
$this->email = $email;
}
public function getUsername()
{
return $this->username;
}
public function getEmail()
{
return $this->email;
}
public function showInfo()
{
echo "Username: " . $this->username . "\n";
echo "Email: " . $this->email . "\n";
}
}
class Admin extends User
{
public $permissions;
public function __construct($username, $email, $permissions)
{
parent::__construct($username, $email);
$this->permissions = $permissions;
}
public function getPermissions()
{
return $this->permissions;
}
public function showInfo()
{
parent::showInfo();
echo "Permissions: " . $this->permissions . "\n";
}
}
$user = new User("John Doe", "[email protected]");
$admin = new Admin("Jane Doe", "[email protected]", ["read", "write", "delete"]);
$users = [$user, $admin];
foreach ($users as $user) {
$user->showInfo();
}In diesem Beispiel haben die Klasse User und die Klasse Admin beide eine Methode showInfo(). Wenn die Methode showInfo() auf einem Objekt aufgerufen wird, wird die korrekte Implementierung der Methode aufgerufen, basierend auf dem Typ des Objekts. Dies ermöglicht es der foreach-Schleife, die Objekte $user und $admin als Objekte desselben Typs zu behandeln, auch wenn sie Instanzen verschiedener Klassen sind.
Fazit
Objektorientierte Programmierung (OOP) ist ein leistungsstarkes Paradigma, das in PHP weit verbreitet ist, um skalierbare, wartbare Webanwendungen zu erstellen. Klassen und Objekte sind die Bausteine; Kapselung, Vererbung und Polymorphismus sind die Features, mit denen Sie effizienten, wiederverwendbaren Code schreiben können. Beherrschen Sie diese Konzepte, und der Rest des PHP-Objektmodells fügt sich von selbst zusammen.
Wie es weitergeht:
- PHP Constructor — Objekte korrekt initialisieren.
- PHP Access Modifiers —
public,protectedundprivateim Detail. - PHP Inheritance — Klassen erweitern und überschreiben.
- PHP Abstract Classes — partielle Baupläne definieren, die Unterklassen vervollständigen müssen.
- PHP Interfaces — einen gemeinsamen Vertrag über nicht verwandte Klassen hinweg durchsetzen.
- PHP Static Methods — Methoden, die zur Klasse und nicht zu einer Instanz gehören.