Statische Eigenschaften und Methoden werden direkt von der Klasse aus angesprochen, und nicht über das Objekt. Damit teilen sich sämtliche Objekte einer Klasse diese Mitglieder, ganz gleich, ob es sich dabei um Eigenschaften oder Methoden handelt. Anstatt ein Objekt der Klasse zu erzeugen, um dann von diesem aus auf die Attribute und Methoden zugreifen zu können, kann immer direkt auf die Eigenschaften und Methoden der Klasse zugegriffen werden. Sollten Sie eine statische Eigenschaft oder Methode erzeugen wollen, verwenden Sie beim Deklarieren das Schlüsselwort static.
Einsatzfälle für statische Variablen und Methoden:
- Nutzen Sie statische Mitglieder für Aufgaben, die keinen Bezug zu den spezifischen Daten eines Objekts haben, beispielsweise Umrechnungen.
- Statische Mitglieder ermöglichen die Implementierung von Verweiszählern, wie beispielsweise Eigenschaften, die allen Objekten gleich sind.
- Statische Mitglieder ermöglichen den direkten Aufruf ohne vorherige Instanziierung. Dies ist sinnvoll, wenn man ohnehin nur ein Objekt benötigt.
<?php
class Klasse {
static $static_var = 5;
public $mein_prop = 'Hallo';
public static function ausgabe() {
return "Ein Text...";
}
}
// Abfrage der statischen Variablen
echo Klasse::$static_var;
// Abfrage der statischen Funktion
echo Klasse::ausgabe();
$objekt = new Klasse;
// Abfrage der public-Variablen durch das Objekt
echo $objekt->mein_prop;
?>
Beispiel – Anzahl der erzeugten Objekte bzw. Entwickler
<?php
class Entwickler
{
static $zaehler;
public function __construct()
{
Entwickler::$zaehler++;
}
public function GetEntwicklerAnzahl()
{
return Entwickler::$zaehler;
}
}
$entwickler1 = new Entwickler();
$entwickler1 = new Entwickler();
$entwickler1 = new Entwickler();
echo "Es existieren " . $entwickler1->GetEntwicklerAnzahl() . " Entwickler.";
?>
Ausgabe
Es existieren 3 Entwickler.
Um auf einfache Weise eine Klasse zu schaffen, die in der Lage ist, die Anzahl ihrer erzeugten Objekte zu erfassen, ist das Schlüsselwort static Gold wert. Durch Einsatz von static ist die Variable $counter der Klasse Entwickler in den Klassenkontext überführt worden. Diese Variable existiert für sämtliche Objekte lediglich einmal. Sobald ein neues Objekt erzeugt wird, wird der Wert im Konstruktor um 1 erhöht. Um dabei die Variablen $counter verarbeiten zu können, erfolgt der Zugriff über einen Klassenverweis, die Pseudovariable $this kann nicht verwendet werden. Dabei wird der Zugriff durch den statischen Verweisoperator :: und den vollständigen Namen der Variablen, inklusive $-Zeichen, ermöglicht. Dies gilt sowohl für Zugriffe innerhalb der Klasse, wie im vorliegenden Beispiel, als auch für externe.
Hinweis: Statische Variablen und Methoden können darüber hinaus als public, private oder protected gekennzeichnet werden.
Beispiel – statische Methoden
<?php
class Datenbank
{
// Variablendeklaration
protected $db;
// Statische Methode
public static function verbindeDB($host, $user, $password)
{
@$db = new mysqli($host, $user, $password);
if (mysqli_connect_errno()) {
printf("Verbindungsfehler: %s\n", mysqli_connect_error());
exit();
}
return $db;
}
public function oeffneDB()
{
$this->db = $this->verbindeDB("localhost", "root", "");
return $this->db;
}
}
// Methodenaufruf ohne Objekterzeugung
// Lediglich bei static-Methoden möglich!
$privatzugang_a = Datenbank::verbindeDB("localhost", "root", "");
echo $privatzugang_a;
// Aus einem Objekt heraus
$zugang = new Datenbank();
$privatzugang_b = $zugang->oeffneDB();
echo $privatzugang_b;
?>
|