Menu
Coddy logo textTech

Instanz- vs. statische Eigenschaften

Teil des Abschnitts Objektorientierte Programmierung der PHP-Journey von Coddy. Lektion 15 von 91.

Wenn du eine Eigenschaft in einer Klasse erstellst, musst du entscheiden, ob sie zu jedem einzelnen Objekt oder zur Klasse selbst gehört. Diese Unterscheidung ist der Unterschied zwischen Instanzeigenschaften und statischen Eigenschaften.

Instanzeigenschaften sind die Standardeinstellung. Jedes Objekt erhält eine eigene Kopie der Eigenschaft, und wenn du sie in einem Objekt änderst, wirkt sich das nicht auf andere aus:

<?php
class User {
    public $name;
    
    public function __construct($name) {
        $this->name = $name;
    }
}

$alice = new User("Alice");
$bob = new User("Bob");

echo $alice->name . "\n";
echo $bob->name . "\n";

Ausgabe:

Alice
Bob

Statische Eigenschaften gehören zur Klasse, nicht zu einem bestimmten Objekt. Du deklarierst sie mit dem Schlüsselwort static und greifst auf sie über den Klassennamen mit :: statt über ein Objekt mit -> zu:

<?php
class User {
    public static $count = 0;
    public $name;
    
    public function __construct($name) {
        $this->name = $name;
        self::$count++;
    }
}

$alice = new User("Alice");
$bob = new User("Bob");

echo User::$count;

Ausgabe:

2

Beachte, wie $count von allen Instanzen gemeinsam genutzt wird. Jedes Mal, wenn wir einen neuen User erstellen, wird dieselbe Variable $count erhöht. Innerhalb der Klasse verwenden wir self::$count, um auf die statische Eigenschaft zu verweisen.

Wichtiger Punkt: Verwende Instanzeigenschaften, wenn jedes Objekt seinen eigenen Wert benötigt. Verwende statische Eigenschaften, wenn du Daten über alle Objekte einer Klasse hinweg teilen musst, etwa zum Zählen von Instanzen oder zum Speichern von Konfigurationen.

challenge icon

Aufgabe

Einfach

Wir erstellen ein Besucher-Tracking-System, das den Unterschied zwischen Instanzeigenschaften (für jeden Besucher eindeutig) und statischen Eigenschaften (von allen Besuchern gemeinsam genutzt) veranschaulicht.

Du wirst zwei Dateien erstellen, um deinen Code zu organisieren:

  • Visitor.php: Definiere eine Visitor-Klasse, die einzelne Besucher erfasst und eine laufende Gesamtzahl der Besucher führt. Jeder Besucher sollte seine eigene $name-Eigenschaft (Instanzeigenschaft) haben, während eine $totalVisitors-Eigenschaft von allen Instanzen gemeinsam genutzt werden sollte (statische Eigenschaft). Der Konstruktor akzeptiert einen Namen, weist ihn zu und erhöht die Gesamtzahl der Besucher. Füge eine getInfo()-Methode hinzu, die "[name] is visitor #[totalVisitors]" zurückgibt.
  • main.php: Binde die Klassendatei von Visitor ein und erstelle anschließend drei Besucher mit den Namen "Alice", "Bob" und "Charlie" (in dieser Reihenfolge). Nachdem alle drei erstellt wurden, gib das Ergebnis des Aufrufs von getInfo() für jeden Besucher aus (jeden in einer eigenen Zeile). Gib anschließend die Gesamtzahl der Besucher aus, indem du direkt über die Klasse auf die statische Eigenschaft zugreifst: Visitor::$totalVisitors.

Denke daran, dass du innerhalb der Klasse auf statische Eigenschaften mit self::$propertyName zugreifst, während du außerhalb der Klasse ClassName::$propertyName verwendest. Auf Instanzeigenschaften greifst du wie gewohnt mit $this->propertyName zu.

Deine Ausgabe sollte jeden Besucher mit seiner zugewiesenen Nummer anzeigen, gefolgt von der endgültigen Gesamtzahl in der letzten Zeile.

Probier es selbst

<?php
// Die Visitor-Klasse einbinden
require_once 'Visitor.php';

// TODO: Erstelle drei Besucher mit den Namen "Alice", "Bob" und "Charlie" (in dieser Reihenfolge)

// TODO: Gib das Ergebnis von getInfo() für jeden Besucher aus (jedes in einer eigenen Zeile)

// TODO: Gib die Gesamtanzahl der Besucher mit Visitor::$totalVisitors aus
?>
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Objektorientierte Programmierung

Übe selbstständig: Online-PHP-Compiler