29. März 2024

Klassen in PHP

Auch wenn PHP oftmals nur imperativ für kleinere Scripte verwendet wird, unterstützt es auch den äußerst mächtigen objektorientierten Ansatz.

In diesem Artikel lernen Sie, wie Sie in PHP eine Klasse schreiben und Objekte dieser Klasse erzeugen. Um den Artikel zu verstehen ist grundlegendes Wissen zur Objektorientierung Voraussetzung. Es geht primär um die Syntax, da diese für einen Java oder C++ Programmierer auf den ersten Blick etwas ungewohnt erscheint.

Voraussetzung für die hier gezeigten PHP-Scripte: PHP 5

PHP Klasse

Eine Klasse kann in PHP Beispielsweise so aussehen:

 <?php
class ExampleClass {

    private $someVariable;
    public $myName;
    
    function __construct($name) {
                $this->myName = $name;
    }
    
    function sayHello() {
        return "Hello, my Name is ".$this->myName;
    }
}
?> 

Die Klasse heißt ExampleClass und hat zwei Klassenvariablen, wobei eine private, die andere public ist. Unterstützt werden private, protected und public.

Die Klasse verfügt außerdem über einen Konstruktor und eine Methode.

private, protected, public

Diese Sprachkonstrukte sind einem objektorientiertem Programmierer sicher bekannt. In PHP werden Sie wie gewohnt verwendet:

private, public und protected modifizieren die Sichtbarkeit von Variablen und Methoden in einer Klasse und zwar wiefolgt:

  • private:  Die Variable/Methode ist nur innerhalb der eigenen Klasse sichtbar und kann auch nur dort verwendet werden. Achtung: Das gilt auch für Ableitungen der Klasse. Diese haben keinen Zugriff auf private Variablen/Methoden.
  • protected: Die Variable/Methode ist nur innerhalb der eigenen Klasse und in jeder Ableitung dieser Klasse sichtbar. Von anderen Klassen aus sind die Variablen/Methoden allerdings nicht zugänglich.
  • public: Die Variable/Methode ist von jeder anderen Klasse, innerhalb der Klasse und von jeder Instanz der Klasse aus sichtbar und zugreifbar.

Hat eine Variable/Methode keinen Sichtbarkeitsmodifikator so ist sie automatisch public.

Konstruktor

Eine Besonderheit in PHP ist, dass es pro Klasse nur einen Konstruktor geben kann. Dieser heißt __construct. Er wird beim Instanziieren eines Objekts der Klasse automatisch aufgerufen.

Beispiele:

 <?php
class myClassA {
    public $test;
    ## Klasse ohne Konstruktor (diese hat automatisch einen leeren default-Konstruktor)
}

class myClassB {
    public $test;
    function __construct($name) {
                $this->test = $name;
    }
}
?> 

Vorsicht: Manche PHP Versionen (5.3.0-5.3.2) unterstützen auch Konstruktoren, die wie die Klasse selbst heißen (vergleiche Konstruktoren in Java). Dies sollte man allerdings aus Gründen der Portabilität vermeiden, da diese Möglichkeit ab Version 5.3.3 wieder wegfällt und der Konstruktor dann als Methode interpretiert wird.

Destruktor

Es ist ebenfalls möglich eine Klasse mit einem Destruktor zu versehen:

 <?php
class myClass {
    private $myVeryLongName;
    function __construct($name) {
                $this->myVeryLongName = $name;
    }
    function __destruct() {
        $this->myVeryLongName = " ";
    }
}
?> 

Auch hier gilt: Es gibt nur einen Destruktor und dieser muss __destruct heißen.

Objekterzeugung

Nun soll aus der obigen Beispielklasse „ExampleClass“ ein Objekt erzeugt werden.

ExampleClass kann sich dabei in einer beliebigen Datei befinden und es soll beispielsweise in der index.php ein Objekt dieser Klasse erzeugt werden:

exampleClass.php:

<?php
class ExampleClass {

    private $someVariable;
    public $myName;
    
    function __construct($name) {
                $this->myName = $name;
    }
    
    function sayHello() {
        return "Hello, my Name is ".$this->myName;
    }
}
?> 

index.php:

 <?php
require_once("exampleClass.php"); ##Dadurch wird die Klasse in diesem Kontext bekannt.

$exampleInstance = new ExampleClass("Computer-Masters.de");

$exampleInstance->sayHello();

?> 

Die Ausgabe dieses PHP-Scripts ist:

Hello, my Name is Computer-Masters.de

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert