Statische Methoden & Eigenschaften
Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy — Lektion 17 von 91.
Genauso wie Eigenschaften statisch sein können, können auch Methoden zur Klasse selbst gehören, anstatt zu einzelnen Objekten. Statische Methoden werden direkt auf der Klasse aufgerufen, ohne dass zuerst eine Instanz erstellt werden muss.
Sie deklarieren eine statische Methode mit dem static Schlüsselwort und rufen 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 arbeiten gut mit statischen Eigenschaften zusammen. Ein gängiges Muster ist die Verwendung einer statischen Methode zur Verwaltung gemeinsamer Klassendaten:
<?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:
2Beachten Sie, dass statische Methoden $this nicht verwenden können, da keine Objektinstanz vorhanden ist. Sie können nur auf statische Eigenschaften und andere statische Methoden unter Verwendung von self:: zugreifen.
Wichtiger Punkt: Statische Methoden sind nützlich für Utility-Funktionen, die keinen Objektzustand benötigen, oder für die Verwaltung von Daten auf Klassenebene. Sie bieten Funktionalität, ohne dass eine Objektinstanziierung erforderlich ist.
Aufgabe
EinfachLassen Sie uns ein ID-Generatorsystem bauen, das statische Methoden und Eigenschaften verwendet, um eindeutige Identifikatoren zu erstellen, ohne Objekte instanziieren zu müssen.
Sie werden zwei Dateien erstellen, um Ihren Code zu organisieren:
IdGenerator.php— Definieren Sie eineIdGenerator-Klasse, die die Generierung eindeutiger IDs nur mit statischen Mitgliedern verwaltet. Die Klasse sollte eine private statische Eigenschaft$lastIdhaben, die bei0beginnt, und eine private statische Eigenschaft$prefix, die auf"ID"gesetzt ist. Erstellen Sie eine statische Methodegenerate(), die die letzte ID erhöht und einen formatierten String zurückgibt, der das Präfix und die neue ID kombiniert (wie"ID1","ID2", etc.). Fügen Sie eine statische MethodesetPrefix($newPrefix)hinzu, die das Präfix ändert, und eine statische MethodegetLastId(), die den aktuellen Wert von$lastIdzurückgibt.main.php— Binden Sie die IdGenerator-Klassendatei ein. Generieren Sie zwei IDs mit dem Standardpräfix und geben Sie jede in einer eigenen Zeile aus. Ändern Sie dann das Präfix mit der statischen Methode in"USER", generieren Sie zwei weitere IDs und geben Sie jede aus. Geben Sie schließlich die letzte ID-Nummer aus, indem Sie die entsprechende statische Methode aufrufen.
Denken Sie daran, dass statische Methoden direkt auf der Klasse mit ClassName::methodName() aufgerufen werden und Sie innerhalb der Klasse auf statische Eigenschaften mit self::$propertyName zugreifen. Da es keine Objektinstanz gibt, können Sie $this nicht in statischen Methoden verwenden.
Ihre Ausgabe sollte den Fortschritt der IDs mit verschiedenen Präfixen zeigen und demonstrieren, wie statische Eigenschaften ihre Werte über mehrere Methodenaufrufe hinweg beibehalten.
Spickzettel
Statische Methoden gehören zur Klasse selbst und werden aufgerufen, ohne eine Instanz zu erstellen. Deklarieren Sie diese mit dem Schlüsselwort static und rufen Sie sie mit dem Klassennamen und dem Operator :: auf:
<?php
class MathHelper {
public static function add($a, $b) {
return $a + $b;
}
}
echo MathHelper::add(5, 3); // 8
Statische Methoden können auf statische Eigenschaften mit self:: zugreifen:
<?php
class Counter {
private static $count = 0;
public static function increment() {
self::$count++;
}
public static function getCount() {
return self::$count;
}
}
Counter::increment();
echo Counter::getCount(); // 1
Statische Methoden können $this nicht verwenden, da keine Objektinstanz vorhanden ist. Sie können nur auf statische Eigenschaften und andere statische Methoden mit self:: zugreifen.
Statische Methoden sind nützlich für Hilfsfunktionen, die keinen Objektzustand benötigen, oder für die Verwaltung von Daten auf Klassenebene, ohne dass eine Objektinstanziierung erforderlich ist.
Probier es selbst
<?php
// Binde die IdGenerator-Klassendatei ein
require_once 'IdGenerator.php';
// TODO: Generiere zwei IDs mit dem Standard-Präfix und gib jede in einer eigenen Zeile aus
// TODO: Ändere das Präfix mithilfe der statischen Methode zu „USER“
// TODO: Generiere zwei weitere IDs und gib jede in einer eigenen Zeile aus
// TODO: Gib die letzte ID-Nummer mithilfe der entsprechenden statischen Methode aus
?>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 die OOPKlassen vs. ObjekteDas $this-SchlüsselwortMethodenEigenschaftenKonstruktor (__construct)Destruktor (__destruct)Rückblick - Einfacher Taschenrechner4Vererbung
Grundlagen der VererbungDas parent:: SchlüsselwortMethoden überschreibenDas final SchlüsselwortAbstrakte KlassenZusammenfassung – Mitarbeiter-Hierarchie7Kapselung
Public, Protected, PrivateZugriffsmodifikatoren im DetailGetter und SetterInformation HidingConstructor Promotion (8.0)Zusammenfassung – Studentenverwaltungssystem2Namensräume & Autoloading
Einführung in NamensräumeDas use-SchlüsselwortPSR-4 Autoloading-StandardComposer AutoloaderZusammenfassung – Organisiertes Projekt5Interfaces & Verträge
Einführung in InterfacesInterfaces implementierenMehrfache Interface-ImplementierungInterface vs. Abstrakte KlasseType Hinting mit InterfacesZusammenfassung – Formen-Rechner8Magische Methoden
Einführung in magische Methoden__toString & __debugInfo__get, __set, __isset, __unset__call & __callStatic__clone & Objekt-Klonen__serialize & __unserializeZusammenfassung - Eigene Collection11Typsystem & Fehlerbehandlung
TypdeklarationenNullable-TypenUnion- & Intersection-TypenException-KlassenEigene Exception-HierarchieTry, Catch, FinallyZusammenfassung - Formular-Validator14Projekt: Bibliotheksverwaltung
ProjektübersichtBuch- und Benutzerklassen3Klasseneigenschaften
Instanz- vs. statische EigenschaftenKonstanten in KlassenStatische Methoden & EigenschaftenPrivate & geschützte EigenschaftenReadonly-Eigenschaften (PHP 8.1)Zusammenfassung – Bankkonto-Manager6Polymorphismus
Method Overriding erneut betrachtetPolymorphismus über InterfacesType Hinting & Union TypesLate Static BindingZusammenfassung – Payment Processor9Traits
Einführung in TraitsVerwendung mehrerer TraitsKonfliktlösung bei TraitsAbstrakte Methoden in TraitsTraits vs. Vererbung12Entwurfsmuster Teil 1
Einführung in EntwurfsmusterSingleton-MusterFactory-MusterObserver-MusterStrategy-Muster15Abschlussherausforderungen
E-Learning-PlattformBanksystemSpielcharakter-EntwicklungFahrzeugvermietung