Statische Methoden & Eigenschaften
Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy. Lektion 17 von 91.
Ebenso wie Eigenschaften statisch sein können, können auch Methoden zur Klasse selbst gehören und nicht zu einzelnen Objekten. Statische Methoden werden direkt über die Klasse aufgerufen, ohne zuvor eine Instanz erstellen zu müssen.
Du deklarierst eine statische Methode mit dem Schlüsselwort static und rufst sie mit dem Klassennamen und dem Operator :: auf:
<?php
class MathHelper {
public static function add($a, $b) {
return $a + $b;
}
public static function multiply($a, $b) {
return $a * $b;
}
}
echo MathHelper::add(5, 3) . "\n";
echo MathHelper::multiply(4, 2);
Ausgabe:
8
8Statische Methoden funktionieren gut mit statischen Eigenschaften. Ein gängiges Muster besteht darin, eine statische Methode zur Verwaltung gemeinsamer Klassendaten zu verwenden:
<?php
class Counter {
private static $count = 0;
public static function increment() {
self::$count++;
}
public static function getCount() {
return self::$count;
}
}
Counter::increment();
Counter::increment();
echo Counter::getCount();
Ausgabe:
2Beachte, dass statische Methoden $this nicht verwenden können, da es keine Objektinstanz gibt. Sie können nur über self:: auf statische Eigenschaften und andere statische Methoden zugreifen.
Wichtiger Punkt: Statische Methoden sind nützlich für Hilfsfunktionen, die keinen Objektstatus benötigen, oder für die Verwaltung von Daten auf Klassenebene. Sie stellen Funktionalität bereit, ohne dass eine Objektinstanziierung erforderlich ist.
Aufgabe
EinfachErstellen wir ein ID-Generator-System, das statische Methoden und Eigenschaften verwendet, um eindeutige Bezeichner zu erstellen, ohne Objekte instanziieren zu müssen.
Du erstellst zwei Dateien, um deinen Code zu organisieren:
IdGenerator.php: Definiere eineIdGenerator-Klasse, die die Generierung eindeutiger IDs ausschließlich mithilfe statischer Member verwaltet. Die Klasse sollte eine private statische Eigenschaft$lastIdhaben, die mit0beginnt, sowie eine private statische Eigenschaft$prefix, die auf"ID"gesetzt ist. Erstelle eine statische Methodegenerate(), die die letzte ID erhöht und eine formatierte Zeichenfolge zurückgibt, die das Präfix und die neue ID kombiniert (wie"ID1","ID2"usw.). Füge eine statische MethodesetPrefix($newPrefix)hinzu, die das Präfix ändert, sowie eine statische MethodegetLastId(), die den aktuellen Wert von$lastIdzurückgibt.main.php: Binde die Klassendatei von IdGenerator ein. Generiere mithilfe des Standardpräfixes zwei IDs und gib jede in einer eigenen Zeile aus. Ändere anschließend mithilfe der statischen Methode das Präfix in"USER", generiere zwei weitere IDs und gib jede davon aus. Gib schließlich die letzte ID-Nummer aus, indem du die entsprechende statische Methode aufrufst.
Denke daran, dass statische Methoden direkt über die Klasse mit ClassName::methodName() aufgerufen werden. Innerhalb der Klasse greifst du mit self::$propertyName auf statische Eigenschaften zu. Da es keine Objektinstanz gibt, kannst du $this in statischen Methoden nicht verwenden.
Deine Ausgabe sollte die Abfolge der IDs mit unterschiedlichen Präfixen zeigen und veranschaulichen, wie statische Eigenschaften ihre Werte über mehrere Methodenaufrufe hinweg beibehalten.
Probier es selbst
<?php
// IdGenerator-Klassendatei einbinden
require_once 'IdGenerator.php';
// TODO: Zwei IDs mit dem Standardpräfix generieren und jede in einer eigenen Zeile ausgeben
// TODO: Das Präfix mit der statischen Methode auf "USER" ändern
// TODO: Zwei weitere IDs generieren und jede in einer eigenen Zeile ausgeben
// TODO: Die letzte ID-Nummer mit der entsprechenden statischen Methode ausgeben
?>Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Objektorientierte Programmierung
1Grundlagen der OOP
Externe DateienEinführung in OOPKlassen vs. ObjekteDas Schlüsselwort $thisMethodenEigenschaftenKonstruktor (__construct)Destruktor (__destruct)Rückblick – Einfacher Taschenrechner4Vererbung
Grundlegende VererbungDas Schlüsselwort parent::MethodenüberschreibungDas Schlüsselwort finalAbstrakte KlassenRückblick – Mitarbeiterhierarchie7Kapselung
Öffentlich, geschützt, privatZugriffsmodifikatoren im DetailGetter und SetterInformationsverbergungKonstruktor-Promotion (8.0)Wiederholung – System zur Verwaltung von Schülerdatensätzen2Namespaces & Autoloading
Einführung in NamespacesDas use-SchlüsselwortPSR-4-Autoloading-StandardComposer-AutoloaderRückblick – Organisiertes Projekt5Schnittstellen & Verträge
Einführung in SchnittstellenSchnittstellen implementierenMehrere Schnittstellen implementierenSchnittstelle vs. abstrakte KlasseTyp-Hinweise mit SchnittstellenRückblick – Formrechner8Magische Methoden
Einführung in magische Methoden__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Objektklonen__serialize & __unserializeRückblick – Benutzerdefinierte Sammlung11Typsystem & Fehlerbehandlung
TypdeklarationenNullable-TypenUnion- & Intersection-TypenException-KlassenBenutzerdefinierte Exception-HierarchieTry, Catch, FinallyRückblick – Formularvalidator14Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen3Klassen-Eigenschaften
Instanz- vs. statische EigenschaftenKonstanten in KlassenStatische Methoden & EigenschaftenPrivate & geschützte EigenschaftenSchreibgeschützte Eigenschaften (PHP 8.1)Zusammenfassung – Bankkonto-Manager6Polymorphie
Methodenüberschreibung erneut betrachtetPolymorphie über SchnittstellenTyp-Hinweise & Union-TypenSpätes statisches BindenRückblick – Zahlungsabwickler9Traits
Einführung in TraitsMehrere Traits verwendenAuflösung von Trait-KonfliktenAbstrakte Methoden in TraitsTraits vs. Vererbung12Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster15Abschließende Herausforderungen
E-Learning-PlattformBankingsystemEntwicklung einer SpielfigurFahrzeugvermietungÜbe selbstständig: Online-PHP-Compiler