Skip to main content

Der Hauptunterschied zwischen $this->set() und self::set() liegt in der Art und Weise, wie in PHP auf Methoden innerhalb einer Klasse zugegriffen wird. Die Wahl hängt davon ab, ob man sich auf eine spezifische Instanz einer Klasse oder auf die Klasse selbst bezieht.

 

$this->set()

 

  • Was es ist: $this ist eine Variable, die sich immer auf die aktuelle Instanz (das Objekt) einer Klasse bezieht. Der Aufruf $this->set() führt also die Methode set() des konkreten Objekts aus.
  • Wann man es nutzt: Dies ist der gängigste Fall. Man verwendet $this->, um auf nicht-statische Methoden und Eigenschaften eines Objekts zuzugreifen. Diese Methoden arbeiten in der Regel mit dem Zustand des jeweiligen Objekts (also den Werten seiner Eigenschaften).

Beispiel:

PHP

class Car {
    public $color;

    public function setColor($color) {
        // Weist der Eigenschaft 'color' DIESER Instanz einen Wert zu
        $this->color = $color;
    }

    public function describe() {
        // Ruft die Methode 'getColor()' DIESER Instanz auf
        echo "This car's color is " . $this->getColor();
    }

    public function getColor() {
        return $this->color;
    }
}

$myCar = new Car();
$myCar->setColor('blue'); // Hier bezieht sich $this innerhalb von setColor() auf $myCar
$myCar->describe(); // Gibt aus: This car's color is blue

Im Beispiel oben verweist $this innerhalb des $myCar-Objekts exakt auf dieses Objekt.


 

self::set()

 

  • Was es ist: self ist ein Schlüsselwort, das sich auf die Klasse selbst bezieht, nicht auf eine spezifische Instanz davon. Der Aufruf self::set() führt daher eine statische Methode namens set() aus.
  • Wann man es nutzt: Man verwendet self::, um auf statische Methoden oder statische Eigenschaften zuzugreifen. Statische Methoden gehören zur Klasse und nicht zu einem Objekt. Sie können aufgerufen werden, ohne dass eine Instanz der Klasse erstellt werden muss und haben keinen Zugriff auf $this.

Beispiel:

PHP

class Counter {
    private static $count = 0; // Statische Eigenschaft

    public static function increment() {
        // Greift auf die statische Eigenschaft der Klasse zu
        self::$count++;
    }

    public static function getCount() {
        // Ruft eine andere statische Methode der Klasse auf
        return self::$count;
    }
}

Counter::increment(); // Aufruf direkt über die Klasse
Counter::increment();
echo Counter::getCount(); // Gibt aus: 2

Hier existiert die Eigenschaft $count nur einmal für die gesamte Klasse Counter, nicht für einzelne Objekte.


 

Zusammenfassung

 

Merkmal $this->set() self::set()
Bezieht sich auf Eine Instanz (ein Objekt) der Klasse. Die Klasse selbst.
Art der Methode Ruft eine nicht-statische Methode auf. Ruft eine statische Methode auf.
Kontext Wird innerhalb eines Objekts verwendet. Wird verwendet, wenn kein Objektkontext nötig ist.
Zugriff Kann auf nicht-statische und statische Eigenschaften/Methoden zugreifen. Kann nur auf statische Eigenschaften/Methoden zugreifen.
Operator -> (Objekt-Operator) :: (Scope-Resolution-Operator)

Faustregel:

  • Arbeitest du mit dem Zustand eines bestimmten Objekts (z. B. Farbe eines Autos, Name einer Person)? Nutze $this->.
  • Benötigst du eine Funktion, die zur Klasse als Ganzes gehört und keinen individuellen Objektzustand braucht (z. B. ein Zähler, eine Hilfsfunktion)? Nutze self:: und deklariere die Methode als static.

Leave a Reply