W3docs

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.

BegriffWas es istBeispiel
KlasseDer Bauplan (Definition)class User { ... }
ObjektEine lebende Instanz einer Klasse$alice = new User(...)
EigenschaftEine Variable, die zu einem Objekt gehört$this->email
MethodeEine Funktion, die zu einer Klasse gehörtgetEmail()

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:

ModifikatorZugänglich vonVerwenden Sie es, wenn
publicÜberallDas Member ist Teil der offiziellen Schnittstelle des Objekts.
protectedDer Klasse und ihren UnterklassenUnterklassen benötigen es, aber externer Code sollte es nicht.
privateNur derselben KlasseDas 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: 150

Da $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:

Übungen

Übung
Was sind in PHP die Merkmale und Funktionen von Objekten und Klassen?
Was sind in PHP die Merkmale und Funktionen von Objekten und Klassen?
Was this page helpful?