$this

Aus php bar

Wechseln zu: Navigation, Suche

$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.

 class MeineKlasse
 {
     protected $eigenschaft = 'zugriff ueber $this';
 
     public function __construct()
     {
         $this->methode();
     }
 
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.

 class MeineKlasse
 {
     public function __construct()
     {
         if (isset($this))
         {
             echo 'Ich bin dynamisch!';
         }
         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.

 class KlasseFuerPHP4
 {
     function KlasseFurPHP4()
     {
         /* ... */
         if ($fehler_aufgetreten)
         {
             $this = false;
         }
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:

 class KlasseMitFehleranfaelligeInitilisierung
 {
     function KlasseMitFehleranfaelligeInitilisierung()
     {
         /* Dinge, die nicht schief gehen können hier hin */
     }
 
     function init()// test
     {
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.

 class KlasseFuerPHP 5
 {
     function KlasseFurPHP5()
     {
         /* ... */
         if ($fehler_aufgetreten)
         {
             throw new Exception($fehlermeldung);
         }
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.


Persönliche Werkzeuge