$this
Aus php bar
$this ist eine Referenz auf das Objekt, zu welchem die Methode gehört, in der es verwendet wird.
Mittels $this kann man auf Methoden und Eigenschaften des gleichen Objekts zugreifen.
1 class MeineKlasse 2 { 3 protected $eigenschaft = 'zugriff ueber $this'; 4 5 public function __construct() 6 { 7 $this->methode(); 8 } 9 10 public function methode() 11 { 12 echo $this->eigenschaft; 13 } 14 }
$this ist nur vorhanden, wenn die Methode dynamisch aufgerufen wurde; aus Kompatibilität mit PHP 4 ist es bei PHP 5 noch möglich auch nicht-statische Methoden statisch aufzurufen.
1 class MeineKlasse 2 { 3 public function __construct() 4 { 5 if (isset($this)) 6 { 7 echo 'Ich bin dynamisch!'; 8 } 9 else 10 { 11 echo 'Ich bin statisch!'; 12 } 13 } 14 } 15 MeineKlasse::__construct(); 16 /* 'Ich bin statisch!' und E_STRICT Error */
$this überschreiben
Mit PHP 4 ist es möglich, $this mit einem neuen Wert zu belegen, um so das Objekt zu verändern, Man kann z.B. ein anderes Objekt oder gar einen beliebigen anderen Wert zuweisen. Dieses Verhalten wurde gelegentlich vor allem in Konstruktoren verwendet.
1 class KlasseFuerPHP4 2 { 3 function KlasseFurPHP4() 4 { 5 /* ... */ 6 if ($fehler_aufgetreten) 7 { 8 $this = false; 9 } 10 } 11 } 12 13 $objekt = new KlasseFuerPHP4(); 14 if (!$objekt) 15 { 16 echo "Fehler im konstruktor"; 17 } else 18 { 19 echo "Alles gut"; 20 }
Dieses Vorgehen sollte vermieden werden, statt dessen sollte man mit PHP 4 die Dinge, die schief gehen können, in eine eigene Methode räumen und dort den Fehler per return zurück geben:
1 class KlasseMitFehleranfaelligeInitilisierung 2 { 3 function KlasseMitFehleranfaelligeInitilisierung() 4 { 5 /* Dinge, die nicht schief gehen können hier hin */ 6 } 7 8 function init()// test 9 { 10 /* Dinge, bei denen etwas schief gehen kann */ 11 12 if ($fehler_aufgetreten) 13 { 14 return false; 15 } 16 17 return true; 18 } 19 } 20 21 $objekt = new KlasseMitFehleranfaelligeInitilisierung(); 22 if (!$objekt->init()) 23 { 24 echo "Fehler im konstruktor"; 25 } else 26 { 27 echo "Alles gut"; 28 }
Unter PHP 5
Mit PHP 5 ist das Überschreiben von $this nicht mehr möglich. Für die Fehlerbehandlung sollten stattdessen Exceptions verwendet werden.
1 class KlasseFuerPHP 5 2 { 3 function KlasseFurPHP5() 4 { 5 /* ... */ 6 if ($fehler_aufgetreten) 7 { 8 throw new Exception($fehlermeldung); 9 } 10 } 11 } 12 13 try 14 { 15 $objekt = new KlasseFuerPHP5(); 16 echo "Alles gut"; 17 } catch (Exception $e) { 18 echo "Fehler im Konstruktor"; 19 echo $e; 20 }
Der Versuch, $this zu überschrieben, führt zu einem Fatal Error.

