Erstens könnte man so etwas wie in deinem Beitrag in einer streng typisierten Sprache wie Java nicht machen. Java-Code lässt sich nicht kompilieren, wenn man nicht-statische Dinge in einem statischen Kontext aufruft. PHP ist in diesen Dingen (noch) nicht so streng, aber man sollte trotzdem nicht alles machen, nur weil man es kann, auch wenn es eine schlechte Praxis ist und in manchen Sprachen sogar eine "falsche" Praxis.
Die Verwendung statischer Methoden hat durchaus Vorteile. Und es ist nicht ganz richtig, dass man nichts gewinnt oder sogar an Flexibilität verliert. Lassen Sie uns ein Beispiel nehmen:
class A {
private static $prop_a = 'property_a';
public static function b() {
echo 'called b()';
echo self::$prop_a;
$A = new A();
$A->c();
}
public function c() {
echo 'called c()';
}
}
Jetzt können wir die Klasse auf diese Weise aufrufen:
A::b();
die Folgendes ausgibt
- angerufen_b
- eigentum_a
- genannt_c
Aber Sie können das Gleiche mit tun:
$a = new A();
$a->b();
$a->c();
c()
wird jetzt zweimal ausgeführt, aber Sie verstehen die Idee. Innerhalb Ihrer Klasse können Sie die Klasse selbst instanziieren und mit ihr wie mit einem normalen Objekt arbeiten. Aber von außen betrachtet ist es nur eine Zeile Code, während es bei der nicht-statischen Methode 3 Zeilen sind. Ziemlich cool, nicht wahr?
Und wie Sie sehen, können Sie die statische Funktion in einem nicht-statischen Kontext verwenden, d.h. Sie können Ihre Methode als statisch deklarieren, aber wenn Sie Ihre Klasse instanziieren, können Sie sie einfach wie eine normale Methode aufrufen. Klingt ziemlich flexibel für mich ;)
Und nein, Sie können nicht $this
in einem statischen Kontext, aber das ist es, was self
ist für ;)