self

Aus php bar

Wechseln zu: Navigation, Suche

self ist ein Schlüsselwort in PHP 5, welches vor allem bei statischen Klassen eine Bedeutung hat.

Mit Hilfe des Schlüsselworts self kann auf die statischen Elemente einer nicht instanzierten Klasse zugegriffen werden. Das nachfolgende Beispiel geht zwar weit über die reine Darstellung des Schlüsselworts self hinaus, zeigt aber deutlich den sinnvollen Einsatz für nicht instanzierte Klassen, deren Einsatz sich vor allem für statische oder globale Konstruktionen eignet. Das Beispiel nutzt die Funktionalität von PHP 5, die Extensions gettext und mysql und verwendet die in PHP 5 neuen OOP-Techniken abstrakter Klassen und Ausnahmen.

1   /**
2    * Exceptions für die Datenbankklassen
3    * 
4    * Rudimentäre Exception-Klasse.
5    */
6   class EDatabase extends Exception
7   {
8       /**
9        * Konstruktor
10       *
11       * Der Konstruktor
12       *
13       * @param string $message Eine Textmeldung
14       * @param int $code Ein Fehler-Code
15       */
16      function __construct($message = '', $code = 0)
17      {
18          parent::__construct($message, $code);
19      }
20  }
21  
22  /**
23   * Datenbank-Wrapper
24   */
25  abstract class Database
26  {
27      /**
28       * Datenbank-Handle
29       *
30       * @var resource
31       * @access protected
32       */
33      protected static $handle = false;
34  
35      /**
36       * Datenbankverbindung herstellen
37       *
38       * @param string $name Der Name der Datenbank
39       * @param string $user Der berechtigte Benutzer
40       * @param string $passwd Das zugehörige Kennwort
41       * @param string $host Der Hostname oder die IP
42       */
43      abstract public function Connect($name, $user = 'root', $passwd = '', $host = 'localhost');
44  
45      /**
46       * Datenbankverbindung lösen
47       */
48      public function DisConnect()
49      {
50          self::$handle = false;
51      }
52  }
53  
54  /**
55   * MySQL-Wrapper
56   * 
57   * Die Beispielklasse könnte die Zugriffe auf die Datenbank übernehmen.
58   */
59  class MySQL extends Database
60  {
61      /**
62       * Datenbankverbindung herstellen
63       *
64       * @param string $name Der Name der Datenbank
65       * @param string $user Der berechtigte Benutzer
66       * @param string $passwd Das zugehörige Kennwort
67       * @param string $host Der Hostname oder die IP
68       */
69      public function Connect($name, $user = 'root', $passwd = '', $host = 'localhost')
70      {
71          if (self::$handle !== false)
72              self::DisConnect();
73          if (false === (self::$handle = mysql_connect($host, $user, $passwd)))
74              throw new EDatabase(sprintf(_("Cannot connect to %s!"), $host));
75          if (false === mysql_select_db($name, self::$handle))
76              throw new EDatabase(sprintf(_("Cannot select database '%s'"), $name));
77          return true;
78      }
79  
80      /**
81       * Datenbankverbindung lösen
82       */
83      public function DisConnect()
84      {
85          if (self::$handle === false)
86              throw new EDatabase(sprintf(_("No connection established!")));
87          mysql_close();
88          parent::DisConnect();
89          return true;
90      }
91  
92      // Weitere Methoden in dieser Klasse
93      //
94  }
95  
96  // Datenbankverbindung herstellen
97  //
98  try {
99      MySQL::Connect('foo', 'me', 'secret', 'localhost');
100 }
101 catch (EDatabase $e)
102 {
103     die(_("Cannot connect to the database!"));
104 }
105 catch (Exception $e)
106 {
107     die($e);
108 }



Persönliche Werkzeuge