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 Methodeset()
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 Aufrufself::set()
führt daher eine statische Methode namensset()
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 alsstatic
.