Frage Eine öffentliche, statische Funktion in einer abstrakten Klasse aufrufen


Ich denke, diese Frage ist mehr auf die Sprachfreaks ausgerichtet. Ich habe folgende Klasse:

<?php  
abstract class ScopeFactory
{
    public static function doStuff()
    {

    }
}

Nun kann ich diese Funktion so nennen:

ScopeFactory::doStuff()

Und das funktioniert glücklich. Ich habe immer unter dem Eindruck codiert, dass abstract Klassen können nicht direkt verwendet werden - und sie müssen von einer konkreten Klasse implementiert werden, um aufrufbar zu sein.

Mein Eindruck von static ist, dass es kein benötigt Beispiel aufrufbar sein.

Könnte mir jemand erklären, warum das legal ist und ob es sein sollte? Ich bin neugierig auf die feineren Details.


11
2018-04-29 14:34


Ursprung


Antworten:


Statische Methoden in OOP ändern den internen Status nicht, daher können Sie statische Methoden von einer abstrakten Klasse aufrufen.


7
2018-04-29 14:49



Ich wäre überrascht, wenn das nicht erlaubt wäre. Die abstrakte Klasse geht davon aus, dass Sie sie nicht instanziieren können. Da statische Methoden keine Klasseninstanz benötigen, können Sie sie gerne verwenden.

Wenn Sie genauer hinschauen, können Sie eine abstrakte statische Methode erstellen und sie von Ihrer nicht abstrakten Methode aus aufrufen:

abstract class ScopeFactory
{
    public static function doStuff()
    {
        static::otherStuff();
    }

    abstract public static function otherStuff();
}

PHP wird Ihnen einen fatalen Fehler geben, der besagt, dass Sie keine abstrakte Methode aufrufen können. Aber es wird Ihnen auch eine E_STRICT-Warnung geben, die besagt, dass Sie keine abstrakten statischen Methoden erstellen sollten.


4
2018-04-29 14:51