SELFPHP

SELFPHP-Druckversion
Original Adresse dieser Seite:
http://www.selfphp.de/praxisbuch/praxisbuchseite.php?site=247&group=44&page=2
© 2001-2017 E-Mail SELFPHP OHG, info@selfphp.de
© 2005-2017 E-Mail PHP5 Praxisbuch - Matthias Kannengiesser, m.kannengiesser@selfphp.de


Statische Eigenschaften und Methoden


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:


<?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.
{PSP}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;
?>