Statische Methoden und Eigenschaften
Mittels dem Schlüsselwort static könnt ihr bei der Objektorientierten Programmierung (OOP) statische Methoden und Eigenschaften definieren. Diese Methoden und Eigenschaften sind nicht an ein einzelnes Objekt gekoppelt, also beispielsweise nicht an einen einzelnen Nutzer, sondern sie gelten global.
Beispiel
Nachfolgend ein Beispiel, um die Nutzung von statischen Klasseneigenschaften und Klassenmethoden zu verdeutlichen:
<?php class User { public $name; public static $allUsers = array(); public static function numberOfUsers() { return count(self::$allUsers); } public static function createNewUser($name) { if(strlen($name) < 10) { echo "Nur User mit langen Namen sind erlaubt!<br>"; return null; } else { $user = new User(); $user->name = $name; self::$allUsers[] = $user; return $user; } } } User::createNewUser("Max Mustermann"); echo "Anzahl Nutzer: ".User::numberOfUsers()."<br>"; User::createNewUser("Lisa Kurz"); echo "Anzahl Nutzer: ".User::numberOfUsers()."<br>"; ?>
Dieses Script besitzt eine nicht-statische Klasseneigenschaft $name sowie die statische Eigenschaft $allUsers. Ebenfalls besitzt die Klasse zwei statische Methoden, $numberOfUsers und $createNewUser.
Möchten wir auf die statische Klasseneigenschaft $allUsers zugreifen, so müssen wir vorab den Klassenname spezifizieren. Beispielsweise wie folgt:
1 |
echo count(User::$allUser); |
Sofern ihr innerhalb der Klasse seid, könnt ihr auf diese statische Eigenschaft auch mittels self::$allUsers zugreifen wie in Zeile 8 und 19 zu sehen.
Mittels der statischen Methode createNewUser($name) können wir neue User-Objekte erzeugen, aber nur wenn der angegeben Name auch ausreichend lang war. Jedes erzeugte User-Objekt wird dann in self::$allUsers abgespeichert.
Um auf diese Methode von außerhalb zuzugreifen, müsst ihr entsprechend User::createNewUser("Name"); ausführen. Identisch User::numberOfUser(); um die Methode auszuführen. Wie schon bei den statischen Klasseneigenschaften könnt ihr self::methodenName() ausführen, falls ihr euch innerhalb einer Methode befindet.
Wann verwende ich statische Methoden und Eigenschaften?
Vorallem statische Methoden werden häufig verwendet, um gewisse Funktionalitäten zu kapseln. Angenommen ihr baut einen Online-Shop. In einer Klasse User könnt ihr alle Methoden definieren, um eure Datenbanktabelle mit Benutzer zu verwalten. Beispielsweise habt ihr eine statische Methode zum Erzeugen eines neuen Benutzers oder zum finden von existenten Benutzern. Neben der User-Klasse habt ihr dann eine weitere Klasse für eure Produkte, in der ebenfalls entsprechende statische Methoden definiert sind. Euer Programmcode wird, wie im nachfolgenden Beispiel gezeigt, deutlich lesbarer.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<?php class User { // Entsprechender Code für eure Benutzerverwaltung } class Product { // Entsprechender Code für eure Produktverwaltung } //Erstellung neuer Nutzer //Finden eines Users echo $lisa->email; //Erzeugen eines Produkts Product::createNewProduct("Spielekonsole", "19,99 Euro"); $playstation = Product::find("Playstation"); echo $playstation->price; ?> |
Autor: Nils Reimers