php mit Adi Prinz

Objektorientierte Programmierung in PHP

Die Objektorientierte Programmierung (OOP) ist ein Programmierparadigma, das die Strukturierung und Organisation von Code durch die Verwendung von Klassen und Objekten ermöglicht. In PHP bietet OOP leistungsstarke Werkzeuge zur Modularisierung und Wiederverwendbarkeit von Code, wodurch die Entwicklung von komplexen Anwendungen erleichtert wird.

Durch die Nutzung von OOP können Entwickler Klassen definieren, die als Baupläne für Objekte dienen. Diese Klassen enthalten Eigenschaften (Attribute) und Methoden (Funktionen), die das Verhalten und die Zustände der Objekte bestimmen.

PHP unterstützt zentrale OOP-Konzepte wie Vererbung, Polymorphismus, Abstraktion und Kapselung, die es ermöglichen, robuste und flexible Anwendungen zu entwickeln. Vererbung ermöglicht es einer Klasse, die Eigenschaften und Methoden einer anderen Klasse zu erben. Polymorphismus erlaubt die Verwendung von Methoden in verschiedenen Kontexten. Abstraktion hilft dabei, komplexe Systeme durch einfachere Modelle darzustellen. Kapselung schützt die Datenintegrität, indem der Zugriff auf die Eigenschaften und Methoden einer Klasse kontrolliert wird.

OOP Klassen und Objekte

Objektorientierte Programmierung (OOP) in PHP ermöglicht die Strukturierung von Code durch die Verwendung von Klassen und Objekten.

  • Klassen: Ein Bauplan für Objekte. Definiert Eigenschaften (Attribute) und Methoden (Funktionen).
  • Objekte: Eine Instanz einer Klasse. Eine konkrete Implementierung des Bauplans der Klasse.
  • Konstruktor: Eine spezielle Methode, die automatisch aufgerufen wird, wenn ein Objekt erstellt wird.
  • Vererbung: Eine Klasse kann von einer anderen Klasse erben, um deren Eigenschaften und Methoden zu übernehmen.
  • Abstrakte Klassen: Eine abstrakte Klasse kann nicht instanziiert werden und muss von anderen Klassen abgeleitet werden.
  • Schnittstellen (Interfaces): Definiert Methoden, die eine Klasse implementieren muss.
  • Statische Eigenschaften und Methoden: Gehören zur Klasse selbst und nicht zu einer bestimmten Instanz der Klasse.

Beispiel: Grundlegende Klasse und Objekt


// Definition der Klasse
class Person {
    // Eigenschaften
    public $name;
    public $age;

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

    // Methode
    public function introduce() {
        echo "Hallo, mein Name ist $this->name und ich bin $this->age Jahre alt.";
    }
}

// Erstellen eines Objekts
$person1 = new Person("Alice", 30);
$person1->introduce();
    

OOP Vererbung

Vererbung ist ein zentrales Konzept der objektorientierten Programmierung (OOP), das es ermöglicht, eine neue Klasse (Unterklasse oder abgeleitete Klasse) von einer bestehenden Klasse (Basisklasse oder Superklasse) zu erstellen. Durch Vererbung kann die Unterklasse die Eigenschaften und Methoden der Basisklasse erben, erweitern oder überschreiben. Dies fördert die Wiederverwendbarkeit und Strukturierung des Codes.

Beispiel: Vererbung


// Basisklasse
class Person {
    public $name;
    public $age;

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

    public function introduce() {
        echo "Hallo, mein Name ist $this->name und ich bin $this->age Jahre alt.";
    }
}

// Abgeleitete Klasse
class Student extends Person {
    public $grade;

    public function __construct($name, $age, $grade) {
        parent::__construct($name, $age);
        $this->grade = $grade;
    }

    public function study() {
        echo "$this->name lernt für die Klasse $this->grade.";
    }
}

$student = new Student("Bob", 20, "10. Klasse");
$student->introduce();
$student->study();
    

Abstrakte Klassen und Schnittstellen

Abstrakte Klassen

Eine abstrakte Klasse ist eine Klasse, die nicht instanziiert werden kann und die als Vorlage für andere Klassen dient. Sie kann abstrakte Methoden enthalten, die in den abgeleiteten Klassen implementiert werden müssen. Abstrakte Klassen ermöglichen es, eine einheitliche Schnittstelle zu definieren, die alle abgeleiteten Klassen implementieren müssen, während sie gleichzeitig einige gemeinsame Funktionalitäten teilen können.

Schnittstellen

Eine Schnittstelle ist eine vollständig abstrakte Klasse, die nur abstrakte Methoden enthalten kann. Schnittstellen definieren eine Reihe von Methoden, die von jeder Klasse, die die Schnittstelle implementiert, definiert werden müssen. Sie ermöglichen es, eine Klasse zur Implementierung bestimmter Methoden zu zwingen, unabhängig davon, wo in der Klassenhierarchie sie sich befindet.

Beispiel: Abstrakte Klassen und Schnittstellen


// Abstrakte Klasse
abstract class Shape {
    abstract public function getArea();
}

// Abgeleitete Klasse
class Circle extends Shape {
    private $radius;

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

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

// Schnittstelle
interface Drawable {
    public function draw();
}

// Klasse implementiert die Schnittstelle
class Square extends Shape implements Drawable {
    private $side;

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

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

    public function draw() {
        echo "Ein Quadrat mit der Seitenlänge $this->side wird gezeichnet.";
    }
}

$circle = new Circle(5);
echo "Die Fläche des Kreises beträgt: " . $circle->getArea() . "
"; $square = new Square(4); echo "Die Fläche des Quadrats beträgt: " . $square->getArea() . "
"; $square->draw();

Statische Eigenschaften und Methoden

Statische Eigenschaften

Statische Eigenschaften sind Eigenschaften einer Klasse, die mit dem static Schlüsselwort deklariert werden. Sie gehören zur Klasse selbst und nicht zu den Instanzen der Klasse. Daher können sie ohne Erstellung einer Klasseninstanz verwendet werden. Statische Eigenschaften sind nützlich, wenn man einen gemeinsamen Wert über alle Instanzen einer Klasse hinweg teilen möchte.

Statische Methoden

Statische Methoden sind Methoden, die mit dem static Schlüsselwort deklariert werden. Sie können direkt über die Klasse aufgerufen werden, ohne eine Instanz der Klasse zu erstellen. Statische Methoden eignen sich gut für Hilfsfunktionen, die nicht auf Instanzvariablen zugreifen müssen.

Beispiel: Statische Eigenschaften und Methoden


class MathUtil {
    public static $pi = 3.14159;

    public static function square($number) {
        return $number * $number;
    }
}

echo "Der Wert von Pi ist: " . MathUtil::$pi . "
"; echo "Das Quadrat von 4 ist: " . MathUtil::square(4) . "
";