Was ist der Unterschied zwischen den folgenden beiden Möglichkeiten, Methoden in einer Klasse aufzurufen?
1
<code>class MyClass { public function myfunc() { // ... } } $myclass = new MyClass; $myclass->myfunc();</code>
2
<code>class MyClass { public static function myfunc() { // ... } } MyClass::myfunc();</code>
Eine besteht darin, sie zuerst zu instanziieren und dann aufzurufen, die andere darin, die statische Methode direkt zu deklarieren und direkt aufzurufen. Was ist der Unterschied zwischen diesen beiden? Unter welchen Umständen sollten sie verwendet werden?
Was ist der Unterschied zwischen den folgenden beiden Möglichkeiten, Methoden in einer Klasse aufzurufen?
1
<code>class MyClass { public function myfunc() { // ... } } $myclass = new MyClass; $myclass->myfunc();</code>
2
<code>class MyClass { public static function myfunc() { // ... } } MyClass::myfunc();</code>
Eine besteht darin, sie zuerst zu instanziieren und dann aufzurufen, die andere darin, die statische Methode direkt zu deklarieren und direkt aufzurufen. Was ist der Unterschied zwischen diesen beiden? Unter welchen Umständen sollten sie verwendet werden?
Das allgemeine Verständnis lautet:
Der erste kann $this->a; self::$a; static::$a; $this->a(); self::a(); static::a()
und andere Methoden verwenden, um relevante Daten und Methoden der aktuellen Klasse zu erhalten
Die zweite Methode kann nur self::$a; static::$a; self::a(); static::a()
und andere Methoden verwenden, um relevante statische Daten und statische Methoden der aktuellen Klasse zu erhalten
Sie können dies in
static
nicht verwenden, da das aktuelle Objekt nicht instanziiert wurde.
Wenn ein Objekt a) eine Utility-Methode hat und b) nicht von einer Instanz des Objekts abhängt, sind statische Methoden am besten geeignet.
Aber in der tatsächlichen Entwicklung hat a) ein höheres Gewicht, das heißt, wenn möglich, können Entwickler für eine Tool-Methode, die tatsächlich weit verbreitet ist, verschiedene Methoden verwenden, um sie statisch zu machen, wie z. B.
<code>public static function getTotal(array $numbers) { $self = new self(); return $self->getTotalNumber($numbers); }</code>
Nur um beim Aufruf ein paar Zeilen Code zu sparen. Es spielt keine Rolle, ob es gut oder schlecht ist, es hängt von den Umständen ab.
Darüber hinaus kommen statische Methoden auch häufiger in Objekten im Singleton-Modus vor. Die Grundursache ist dieselbe wie oben und wird nicht im Detail erläutert.