OOP (Objektorientierte Programmierung) in PHP

Unter OOP (objektorientierte Programmierung) in PHP versteht man einen Programmierparadigma, bei dem Programme aus objektorientierten Klassen und Objekten bestehen. In PHP werden Klassen und Objekte verwendet, um Code wiederzuverwenden und komplexe Anwendungen zu strukturieren und zu organisieren.

Um OOP in PHP zu verwenden, muss ein PHP Entwickler mit den wichtigsten OOP-Konzepten wie Klassen, Objekten, Vererbung und Polymorphismus vertraut sein.

Inhalt

Wie sieht eine einfache PHP Klasse aus?

<?php

// Definieren einer einfachen PHP Klasse "Person"
class Person
{
  // Eigenschaften (Variablen)
  public $name;
  public $age;

  // Konstruktor-Methode
  public function __construct($name, $age)
  {
    $this->name = $name;
    $this->age = $age;
  }

  // Methoden (Funktionen)
  public function getName()
  {
    return $this->name;
  }

  public function getAge()
  {
    return $this->age;
  }
}

// Initialisierung der Klasse "Person"
$p1 = new Person("Max Mustermann", 35);

// Ausgabe der Eigenschaften des Objekts
echo "Name: " . $p1->getName() . "<br>";
echo "Alter: " . $p1->getAge() . "<br>";

?>

OOP in PHP basiert auf vier Hauptprinzipien:

Kapselung mit PHP

Dies bezieht sich auf die Praxis der Bündelung von Daten und Funktionen, die mit diesen Daten arbeiten, in einer einzigen Einheit, die als Objekt bezeichnet wird. Die Kapselung ermöglicht es Entwicklern, die internen Details und die Komplexität eines Objekts zu verbergen und eine klare und konsistente Schnittstelle für die Interaktion mit dem Objekt bereitzustellen.

In diesem Beispiel zeige ich eine einfache PHP Klasse für ein Bankkonto, die die Konzepte der Kapselung verwendet. Die Klasse BankAccount enthält drei Methoden: deposit(), withdraw() und getBalance(). Die Variable $balance wird als privates Attribut der Klasse deklariert, was bedeutet, dass sie nur innerhalb der Klasse selbst verwendet werden kann.

Die deposit()-Methode fügt einen Betrag zum aktuellen Kontostand hinzu, während die withdraw()-Methode einen Betrag vom aktuellen Kontostand abzieht. Wenn versucht wird, mehr Geld abzuheben, als auf dem Konto vorhanden ist, wird eine Exception ausgelöst. Schließlich gibt die getBalance()-Methode den aktuellen Kontostand zurück.

Durch die Verwendung von Kapselung wird verhindert, dass die Klasse von außerhalb manipuliert werden kann, indem direkt auf die $balance-Variable zugegriffen wird. Stattdessen müssen die Methoden der Klasse verwendet werden, um den Kontostand zu ändern oder abzufragen. Dies stellt sicher, dass der Kontostand immer korrekt und konsistent ist.

<?php
    class BankAccount {
    private $balance = 0;

    public function deposit($amount) {
    $this->balance += $amount;
    }

    public function withdraw($amount) {
    if ($amount > $this->balance) {
    throw new Exception("Insufficient funds");
    }
    $this->balance -= $amount;
    }

    public function getBalance() {
    return $this->balance;
    }
    }

    $account = new BankAccount();

    $account->deposit(100);
    $account->withdraw(50);

    echo $account->getBalance(); // Outputs 50
?>

Abstraktion mit PHP

Hierbei handelt es sich um den Prozess der Darstellung wesentlicher Merkmale eines Objekts, ohne irrelevante oder unnötige Details einzubeziehen. Die Abstraktion ermöglicht es den Entwicklern, sich auf die wesentlichen Merkmale eines Objekts zu konzentrieren und Klassen zu erstellen, die zur Modellierung von Objekten und Beziehungen in der realen Welt verwendet werden können.

In diesem Beispiel zeige ich eine PHP Klasse zum Thema Abstraktion. Die Klasse Shape ist eine abstrakte Klasse, die die Methoden getArea() und getColor() enthält. Die getArea()-Methode ist abstrakt, was bedeutet, dass sie in der abstrakten Klasse nicht implementiert wird und von erbenden Klassen implementiert werden muss.

Die Klasse Shape wird von zwei Klassen erbt: Square und Circle. Jede dieser Klassen implementiert ihre eigene Version der getArea()-Methode, um die Fläche des jeweiligen geometrischen Objekts zu berechnen.

Durch die Verwendung von Abstraktion können wir gemeinsame Eigenschaften und Methoden in der abstrakten Klasse Shape zusammenfassen, ohne dass wir konkrete Implementationen für jede Form bereitstellen müssen. Dies ermöglicht es uns, die Klasse Shape als Basis für verschiedene geometrische Formen zu verwenden, ohne dass wir jede Form einzeln definieren müssen.

<?php
abstract class Shape {
  protected $color;

  public function __construct($color = 'red') {
    $this->color = $color;
  }

  abstract public function getArea();

  public function getColor() {
    return $this->color;
  }
}

class Square extends Shape {
  protected $length = 4;

  public function getArea() {
    return pow($this->length, 2);
  }
}

class Circle extends Shape {
  protected $radius = 5;

  public function getArea() {
    return M_PI * pow($this->radius, 2);
  }
}

$circle = new Circle();
echo $circle->getArea(); // 78.53981633974483

$square = new Square();
echo $square->getColor(); // red

?>

Vererbung mit PHP

Dies ist die Fähigkeit einer Klasse, die Eigenschaften und Methoden einer anderen Klasse, der sogenannten Elternklasse, zu erben. Die Vererbung ermöglicht es Entwicklern, eine Hierarchie von Klassen zu erstellen, in der jede Klasse die Eigenschaften und Methoden ihrer Elternklasse erben kann und darüber hinaus ihre eigenen einzigartigen Merkmale hinzufügen kann.

In diesem Beispiel zeige ich eine PHP Klasse zum Thema Vererbung. Die Klasse Shape ist die Basisklasse und enthält die Eigenschaft $color sowie die Methode getColor(). Die Klassen Square, Circle und Triangle erben von der Klasse Shape und können daher auf die Eigenschaften und Methoden der Basisklasse zugreifen.

Jede erbende Klasse hat ihre eigenen spezifischen Eigenschaften und Methoden, die sie von der Basisklasse erbt. Die Klasse Square hat zum Beispiel die Eigenschaft $length und die Methode getArea(), die die Fläche des Quadrats berechnet. Die Klasse Circle hat die Eigenschaft $radius und ebenfalls die Methode getArea(), die die Fläche des Kreises berechnet. Die Klasse Triangle hat die Eigenschaften $base und $height und die Methode getArea(), die die Fläche des Dreiecks berechnet.

Durch die Verwendung von Vererbung können wir die gemeinsamen Eigenschaften und Methoden in der Basisklasse Shape zusammenfassen und von den erbenden Klassen erben. Dies ermöglicht es uns, Code zu wiederholen und sorgt für eine bessere Organisation und Wartbarkeit des Codes.

<?php
class Shape {
  protected $color;

  public function __construct($color = 'red') {
    $this->color = $color;
  }

  public function getColor() {
    return $this->color;
  }
}

class Square extends Shape {
  protected $length = 4;

  public function getArea() {
    return pow($this->length, 2);
  }
}

class Circle extends Shape {
  protected $radius = 5;

  public function getArea() {
    return M_PI * pow($this->radius, 2);
  }
}

class Triangle extends Shape {
  protected $base = 4;
  protected $height = 7;

  public function getArea() {
    return 0.5 * $this->base * $this->height;
  }
}

$circle = new Circle();
echo $circle->getArea(); // 78.53981633974483

$triangle = new Triangle();
echo $triangle->getColor(); // red

$square = new Square();
echo $square->getArea(); // 16
?>

Polymorphismus mit PHP

Dies ist die Fähigkeit verschiedener Objekte, auf denselben Methodenaufruf auf unterschiedliche Weise zu reagieren. Polymorphismus ermöglicht es Entwicklern, Objekte mit unterschiedlichen Implementierungen derselben Methode zu erstellen und diese Objekte austauschbar zu verwenden, ohne die spezifischen Details ihrer Implementierung kennen zu müssen.

In diesem Beispiel zeige ich eine PHP Klasse zum Thema Polymorphismus. Die Klasse Shape ist eine abstrakte Klasse, die die Methoden getArea() und getColor() enthält. Die getArea()-Methode ist abstrakt, was bedeutet, dass sie in der abstrakten Klasse nicht implementiert wird und von erbenden Klassen implementiert werden muss.

Die Klasse Shape wird von drei Klassen erbt: Square, Circle und Triangle. Jede dieser Klassen hat ihre eigene Implementierung der getArea()-Methode, um die Fläche des jeweiligen geometrischen Objekts zu berechnen.

Die Funktion printArea() nimmt ein Objekt der Klasse Shape als Argument und ruft die getArea()-Methode auf, um die Fläche des geometrischen Objekts zu berechnen und auszugeben. Die Funktion ist polymorph, da sie für jedes geometrische Objekt, das von der Klasse Shape erbt, verwendet werden kann.

Durch die Verwendung von Polymorphismus können wir eine einzige Funktion erstellen, die für verschiedene Typen von geometrischen Objekten verwendet werden kann. Dies ermöglicht es uns, unseren Code wiederzuverwenden und flexibler zu gestalten.

<?php
abstract class Shape {
  protected $color;

  public function __construct($color = 'red') {
    $this->color = $color;
  }

  abstract public function getArea();

  public function getColor() {
    return $this->color;
  }
}

class Square extends Shape {
  protected $length = 4;

  public function getArea() {
    return pow($this->length, 2);
  }
}

class Circle extends Shape {
  protected $radius = 5;

  public function getArea() {
    return M_PI * pow($this->radius, 2);
  }
}

class Triangle extends Shape {
  protected $base = 4;
  protected $height = 7;

  public function getArea() {
    return 0.5 * $this->base * $this->height;
  }
}

function printArea(Shape $shape) {
  echo $shape->getArea();
}

$circle = new Circle();
printArea($circle); // 78.53981633974483

$triangle = new Triangle();
printArea($triangle); // 14

$square = new Square();
printArea($square); // 16
?>

Diese Prinzipien ermöglichen es, Programme in PHP modular, skalierbar und wiederverwendbar zu gestalten und erleichtern die Entwicklung und Wartung von Anwendungen.

Prozedurale Programmierung vs. objektorientierte Programmierung in PHP

Prozedurale Programmierung in PHP

Prozedurale Programmierung in PHP ist ein Programmierparadigma, das sich auf die Verwendung von Funktionen und Prozeduren zur Strukturierung des Codes konzentriert. In prozeduraler Programmierung werden Funktionen verwendet, um bestimmte Aufgaben auszuführen, und Variablen werden verwendet, um Daten zu speichern und zu manipulieren.

In prozeduraler Programmierung werden Funktionen und Variablen im globalen Bereich definiert, was bedeutet, dass sie von überall im Code aus aufgerufen und verwendet werden können. Dies führt oft zu wiederholtem Code und einer schlechten Strukturierung des Codes, insbesondere bei größeren Projekten.

Prozedurale Programmierung in PHP wird im Vergleich zu objektorientierter Programmierung als weniger strukturiert und organisiert angesehen. In vielen Fällen bietet objektorientierte Programmierung in PHP bessere Vorteile bei der Erstellung größerer und komplexerer Anwendungen.

Hier ist ein einfaches Beispiel eines PHP Scripts, das prozedurale Programmierung verwendet

In diesem Skript haben wir zwei Funktionen definiert: calculateSum() und calculateDifference(). Diese Funktionen nehmen zwei Zahlen als Argumente und berechnen die Summe bzw. den Unterschied der beiden Zahlen. Anschließend haben wir die beiden Variablen $x und $y definiert und die Funktionen aufgerufen, um die Summe und den Unterschied dieser beiden Zahlen zu berechnen.

Dies ist ein einfaches Beispiel für prozedurale Programmierung in PHP, da wir eine Funktion verwenden, um eine bestimmte Aufgabe auszuführen, und Variablen verwenden, um Daten zu speichern und zu manipulieren. Allerdings ist dieser Code nicht sehr strukturiert und würde sich schlecht für größere oder komplexere Anwendungen eignen. Objektorientierte Programmierung würde in diesen Fällen die bessere Wahl sein.

<?php
function calculateSum($x, $y)
{
    return $x + $y;
}

function calculateDifference($x, $y)
{
    return $x - $y;
}

$x = 5;
$y = 3;

$sum = calculateSum($x, $y);
$difference = calculateDifference($x, $y);

echo "The sum of $x and $y is $sum\n";
echo "The difference of $x and $y is $difference\n";
?>

Prozedurale Programmierung oder objektorientierte Programmierung?

Es gibt mehrere Gründe, warum man objektorientierte Programmierung in PHP vorziehen sollte gegenüber prozeduraler Programmierung:

  • Objektorientierte Programmierung bietet eine bessere Struktur und Organisation des Codes. Indem man Konzepte wie Klassen, Objekte und Vererbung verwendet, kann man wiederholten Code zusammenfassen und den Code übersichtlicher und verständlicher gestalten.
  • Objektorientierte Programmierung ermöglicht es, größere und komplexere Anwendungen zu erstellen. Indem man Code in kleinere, wiederverwendbare Einheiten unterteilt, können größere Projekte leichter verwaltet und gepflegt werden.
  • Objektorientierte Programmierung ermöglicht Polymorphismus, was bedeutet, dass man einzelne Funktionen und Methoden für verschiedene Typen von Objekten verwenden kann. Dies ermöglicht es, den Code wiederzuverwenden und flexibler zu gestalten.
  • Objektorientierte Programmierung bietet die Möglichkeit, Kapselung und Abstraktion zu verwenden. Kapselung ermöglicht es, den Zugriff auf bestimmte Teile des Codes zu beschränken, um die Integrität und Konsistenz des Codes zu gewährleisten. Abstraktion ermöglicht es, gemeinsame Eigenschaften und Methoden in abstrakten Klassen zusammenzufassen, ohne konkrete Implementierungen bereitzustellen.
  • Insgesamt bietet objektorientierte Programmierung in PHP eine bessere Struktur, Skalierbarkeit und Flexibilität als prozedurale Programmierung.

Noch Fragen zu OOP mit PHP, dann stelle Deine Fragen in unserem Forum für PHP-Entwickler

Hier Kannst Du einen Kommentar verfassen


Bitte gib mindestens 10 Zeichen ein.
Wird geladen... Bitte warte.
* Pflichtangabe
Es sind noch keine Kommentare vorhanden.

Tutorial veröffentlichen

Tutorial veröffentlichen

Teile Dein Wissen mit anderen Entwicklern weltweit

Du bist Profi in deinem Bereich und möchtest dein Wissen teilen, dann melde dich jetzt an und teile es mit unserer PHP-Community

mehr erfahren

Tutorial veröffentlichen

HTML5-Formulare mit jQuery.html5form

Mit dem von Matias Mancini machen Sie aus Ihrem Browser einen HTML5-Kompatiblen Bowser. Mit Einschränkungen aber ... ...

admin

Autor : admin
Kategorie: Sonstige Tutorials

MySQL Klasse

In meinem kleinen Tutorial zeige ich euch, wie ihr ganz einfach eine kleine MySQL Klasse schreiben könnt. ...

Borlabs

Autor : Borlabs
Kategorie: mySQL-Tutorials

Konfiguration eines Linux-Rechners als DSL-Router

Dieser Artikel beschreibt wie man unter LINUX einen DSL-Rooter für Windows konfiguriert. ...

tschiesser@

Autor : tschiesser@
Kategorie: Linux & Server Tutorials