TOC

This article is currently in the process of being translated into German (~99% done).

Classes:

Static classes

Da eine Klasse mehr als einmal instanziiert werden kann, bedeutet dies, dass die Werte, die sie enthält, einzigartig für die Instanz/ das Objekt sind und nicht für die Klasse selbst. Das bedeutet auch, dass man keine Methoden oder Variablen einer Klasse verwenden kann, ohne sie vorher zu instanziieren, aber es gibt eine Ausnahme von dieser Regel. Sowohl Variablen als auch Methoden einer Klasse können als statisch deklariert werden (auch in einigen Programmiersprachen als "geteilt" bezeichnet), was bedeutet, dass sie verwendet werden können, ohne die Klasse zuerst zu instanziieren. Da dies bedeutet, dass eine Klassenvariable ohne eine bestimmte Instanz abgerufen werden kann, bedeutet dies auch, dass es nur eine Version dieser Variable geben wird. Eine weitere Folge ist, dass eine statische Methode nicht auf nichtstatische Variablen und Methoden zugreifen kann, da diese eine Instanz der Klasse erfordern.

In einem früheren Kapitel haben wir eine Benutzerklasse geschrieben. Erweiterten wir sie doch mit einigen statischen Funktionen, um zu sehen, worum es bei dem Fuzz geht:

<?php
class User
{
    public $name;
    public $age;
    public static $minimumPasswordLength = 6;
    
    public function Describe()
    {
        return $this->name . " is " . $this->age . " years old";
    }
    
    public static function ValidatePassword($password)
    {
        if(strlen($password) >= self::$minimumPasswordLength)
            return true;
        else
            return false;
    }
}

$password = "test";
if(User::ValidatePassword($password))
    echo "Password is valid!";
else
    echo "Password is NOT valid!";
?>

Wir haben dieser Klasse eine statische Variable hinzugefügt, die $minimumPasswordLength heißt und die den Wert 6 hat. Anschließend haben wir eine statische Funktion hinzugefügt, um zu überprüfen, ob ein bestimmtes Passwort gültig ist. Ich gebe zu, dass die hier durchgeführte Validierung sehr begrenzt ist, aber natürlich erweitert werden kann. Könnten wir das nicht einfach mit einer normalen Variable und Funktion in der Klasse tun? Sicher könnten wir, aber es macht einfach mehr Sinn, dies statisch zu tun, da wir keine Informationen verwenden, die für einen Benutzer spezifisch sind. Da die Funktionalität allgemein ist, ist es nicht notwendig, die Klasse zu instanziieren, um sie zu verwenden.

Wie man sieht, greifen wir auf unsere statischen Variable aus unserer statischen Methode zu, indem wir ihr das self-Schlüsselwort voranstellen, was wie beim Zugriff auf statische Mitglieder und Konstanten ist. Offensichtlich funktioniert es nur innerhalb der Klasse. Um die ValidatePassword()-Funktion von außerhalb der Klasse aufzurufen, verwenden wir den Namen der Klasse. Sie werden auch feststellen, dass der Zugriff auf statische Mitglieder den Doppel-Doppelpunkt-Operator(::) anstelle des ->-Operators erfordert, aber ansonsten ist es im Grunde das Gleiche.


This article has been fully translated into the following languages: Is your preferred language not on the list? Click here to help us translate this article into your language!